上传文件时发生NullPointerException [英] NullPointerException when uploading a file

查看:228
本文介绍了上传文件时发生NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上传一个文件时,出现如下错误:

lockquote
$ str $ Struts问题报告Struts has检测到未处理的异常:消息:文件:java / io / File.java行号:317
Stacktraces java.lang.NullPointerException java.io.File。(File.java:317)
example.uploadFile .execute(uploadFile.java:36)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)
java.lang.reflect.Method.invoke(Method.java:483)


index.jsp

 < form action =uploadmethod =postenctype =multipart / form-data> 
< label for =myFile>上传您的文件< / label>
< input type =filename =myFile/>
< input type =submitvalue =上传/>
< / form>

uploadFile.java

  package示例; 
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;

public class uploadFile extends ActionSupport {
private File myFile;
私人字符串myFileContentType;
private String myFileFileName;
private String destPath;

public String execute(){

destPath =C:\\Program Files\\Apache Software Foundation\\Apache Tomcat 8.0.3\\ \\\工作;

尝试{
System.out.println(Src File name:+ myFile);
System.out.println(Dst文件名:+ myFileFileName);
文件destFile =新文件(destPath,myFileFileName);
FileUtils.copyFile(myFile,destFile);
} catch(IOException e){
return ERROR;
}

返回SUCCESS;

$ b $ public File getMyFile(){
return myFile;`
}
public void setMyFile(File myFile){
this。 myFile = myFile;这是用户选择上传的文件
}
public String getMyFileContentType(){
return myFileContentType;上传文件的内容类型
}
public void getMyFileContentType(String myFileContentType){
this.myFileContentType = myFileContentType;`
}
public String getMyFileFileName(){
返回myFileFileName;

public void setMyFileFileName(String myFileFileName){
this.myFileFileName = myFileFileName;




$ str $ str

$ b

< struts>
< include file =example.xml/>
< constant name =struts.devModevalue =true/>
< constant name =struts.multipart.maxSizevalue =1000000/>

<! - - 默认包的配置。 - >
< action name =uploadclass =example.uploadFile>
< interceptor-ref name =basicStack/>
< interceptor-ref name =fileUpload>
< param name =allowedTypes> image / jpeg,image / gif< / param>
< / interceptor-ref>
< result name =success> /success.jsp< / result>
< result name =error> /error.jsp< / result>
< / action>
< / package>
< / struts>


解决方案

FileUpload 拦截器必须在 basicStack 中的其他拦截器之前运行。

你可以在 struts-default.xml


$ b 示例1:

<! - 示例文件上传堆栈 - >
< interceptor-stack name =fileUploadStack>
< interceptor-ref name =fileUpload/>
< interceptor-ref name =basicStack/>
< / interceptor-stack>

示例2:

 < interceptor-stack name =defaultStack> 
< interceptor-ref name =exception/>
< interceptor-ref name =alias/>
< interceptor-ref name =servletConfig/>
< interceptor-ref name =i18n/>
< interceptor-ref name =prepare/>
< interceptor-ref name =chain/>
< interceptor-ref name =scopedModelDriven/>
< interceptor-ref name =modelDriven/>
< interceptor-ref name =fileUpload/>
< interceptor-ref name =checkbox/>
< interceptor-ref name =datetime/>
< interceptor-ref name =multiselect/>
< interceptor-ref name =staticParams/>
< interceptor-ref name =actionMappingParams/>
< interceptor-ref name =params>
< param name =excludeParams> ^ action:。*,^ method:。*< / param>
< / interceptor-ref>
< interceptor-ref name =conversionError/>
< interceptor-ref name =validation>
< param name =excludeMethods>输入,返回,取消,浏览< /参数>
< / interceptor-ref>
< interceptor-ref name =workflow>
< param name =excludeMethods>输入,返回,取消,浏览< /参数>
< / interceptor-ref>
< interceptor-ref name =debugging/>
< interceptor-ref name =deprecation/>
< / interceptor-stack>

然后在 basicStack 声明之前手动,或使用堆栈( defaultStack fileUploadStack ),并在参数名称之前包含Interceptor的名称例如:
$ b

< interceptor-ref name =defaultStack>
< param name =fileUpload.allowedTypes> image / jpeg,image / gif< / param>
< / interceptor-ref>



 < interceptor-ref name =fileUploadStack> 
< param name =fileUpload.allowedTypes> image / jpeg,image / gif< / param>
< / interceptor-ref>


When uploading a file, I get the following error:

Struts Problem Report Struts has detected an unhandled exception: Messages: File: java/io/File.java Line number: 317 
Stacktraces java.lang.NullPointerException java.io.File.(File.java:317) 
    example.uploadFile.execute(uploadFile.java:36) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav‌​a:43)
    java.lang.reflect.Method.invoke(Method.java:483)

index.jsp

<form action="upload" method="post" enctype="multipart/form-data">
    <label for="myFile">Upload your file</label>
    <input type="file" name="myFile" />
    <input type="submit" value="Upload"/>
</form>

uploadFile.java

package example;
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;    
import com.opensymphony.xwork2.ActionSupport;

public class uploadFile extends ActionSupport {
   private File myFile;
   private String myFileContentType;
   private String myFileFileName;
   private String destPath;

   public String execute() {

      destPath = "C:\\Program Files\\Apache Software Foundation\\Apache Tomcat 8.0.3\\work";

      try{
         System.out.println("Src File name: " + myFile);
         System.out.println("Dst File name: " + myFileFileName);                     
         File destFile  = new File(destPath, myFileFileName);
         FileUtils.copyFile(myFile, destFile);      
      }catch(IOException e){
         return ERROR;
      }

      return SUCCESS;
   }

   public File getMyFile() {
      return myFile;`
   }
   public void setMyFile(File myFile) {
      this.myFile = myFile; this the file which user selects to upload
   }
   public String getMyFileContentType() {
      return myFileContentType; content type of the uploading file
   }
   public void setMyFileContentType(String myFileContentType) {
      this.myFileContentType = myFileContentType;`
   }
   public String getMyFileFileName() {
      return myFileFileName;
   }
   public void setMyFileFileName(String myFileFileName) {
      this.myFileFileName = myFileFileName; 
   }
}

struts.xml

<struts>
    <include file="example.xml"/>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.multipart.maxSize" value="1000000" />

    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
       <action name="upload" class="example.uploadFile">
            <interceptor-ref name="basicStack"/>
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">image/jpeg,image/gif</param>
            </interceptor-ref>
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

解决方案

To work properly, the FileUpload Interceptor must run before some other Interceptors in the basicStack;

you can check it out in the struts-default.xml:

Example 1:

<!-- Sample file upload stack -->
<interceptor-stack name="fileUploadStack">
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="basicStack"/>
</interceptor-stack>

Example 2:

<interceptor-stack name="defaultStack">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="alias"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="i18n"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="chain"/>
    <interceptor-ref name="scopedModelDriven"/>
    <interceptor-ref name="modelDriven"/>
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="checkbox"/>
    <interceptor-ref name="datetime"/>
    <interceptor-ref name="multiselect"/>
    <interceptor-ref name="staticParams"/>
    <interceptor-ref name="actionMappingParams"/>
    <interceptor-ref name="params">
        <param name="excludeParams">^action:.*,^method:.*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError"/>
    <interceptor-ref name="validation">
        <param name="excludeMethods">input,back,cancel,browse</param>
    </interceptor-ref>
    <interceptor-ref name="workflow">
        <param name="excludeMethods">input,back,cancel,browse</param>
    </interceptor-ref>
    <interceptor-ref name="debugging"/>
    <interceptor-ref name="deprecation"/>
</interceptor-stack>

Then place it manually before the basicStack declaration, or use a stack (the defaultStack, or the fileUploadStack) and include the Interceptor's name before the parameter's name, for example:

<interceptor-ref name="defaultStack">
    <param name="fileUpload.allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>

or

<interceptor-ref name="fileUploadStack">
    <param name="fileUpload.allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>

这篇关于上传文件时发生NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆