上传文件时出现 NullPointerException [英] NullPointerException when uploading a file
问题描述
上传文件时出现以下错误:
<块引用>Struts 问题报告 Struts 检测到一个未处理的异常:消息:文件:java/io/File.java 行号:317Stacktraces java.lang.NullPointerException java.io.File.(File.java:317)example.uploadFile.execute(uploadFile.java:36)sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)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
上传文件.java
包示例;导入 java.io.File;导入 org.apache.commons.io.FileUtils;导入 java.io.IOException;导入 com.opensymphony.xwork2.ActionSupport;公共类 uploadFile 扩展 ActionSupport {私人文件 myFile;私人字符串 myFileContentType;私人字符串 myFileFileName;私有字符串destPath;公共字符串执行(){destPath = "C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.3\work";尝试{System.out.println("源文件名:" + myFile);System.out.println("Dst 文件名:" + myFileFileName);File destFile = new File(destPath, myFileFileName);FileUtils.copyFile(myFile, destFile);}catch(IOException e){返回错误;}返回成功;}公共文件 getMyFile() {返回我的文件;`}public void setMyFile(File myFile) {this.myFile = myFile;这是用户选择上传的文件}公共字符串 getMyFileContentType() {返回 myFileContentType;上传文件的内容类型}public void setMyFileContentType(String myFileContentType) {this.myFileContentType = myFileContentType;`}公共字符串 getMyFileFileName() {返回我的文件文件名;}public void setMyFileFileName(String myFileFileName) {this.myFileFileName = myFileFileName;}}
struts.xml
<include file="example.xml"/><constant name="struts.devMode" value="true"/><constant name="struts.multipart.maxSize" value="1000000"/><!-- 默认包的配置.--><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></动作></包></支柱>
要正常工作,FileUpload
拦截器必须在 basicStack
中的其他一些拦截器之前运行;
您可以在 struts-default.xml
:
示例 1:
<!-- 示例文件上传堆栈--><interceptor-stack name="fileUploadStack"><interceptor-ref name="fileUpload"/><interceptor-ref name="basicStack"/></拦截器堆栈>
示例 2:
<interceptor-ref name="异常"/><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"/></拦截器堆栈>
然后将其手动放置在 basicStack
声明之前,或使用堆栈(defaultStack
或 fileUploadStack
)并包含拦截器的名称在参数名称之前,例如:
<param name="fileUpload.allowedTypes">image/jpeg,image/gif</param></interceptor-ref>
或
<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.java: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屋!