2015-03-23 3 views
2

При загрузке файла, я получаю следующее сообщение об ошибке:NullPointerException при загрузке файла

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> 
+0

эта строка файла DestFile = новый файл (DestPath, myFileFileName); –

+0

да, спасибо, спасибо :) –

+0

Тогда примите ответ ... –

ответ

3

Для правильной работы перехватчик должен быть запущен до некоторых других перехватчиков в basicStack;

вы можете проверить его в struts-default.xml:

Пример 1:

<!-- Sample file upload stack --> 
<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">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> 

Затем поместите его вручную перед basicStack декларации, или использовать стек (defaultStack или fileUploadStack) и включить имя перехватчика до имени параметра, например:

<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> 
Смежные вопросы