使用Struts上传图像
我刚刚开始练习struts,所以我对这个框架有点新意。 所以,我要做的是使用这个JSP文件上传一个图像:
Upload User Image Struts2 File Upload & Save Example
Image :
动作类如下:
public class InsertImageBean extends ActionSupport{ private static final long serialVersionUID = 1L; private File Image; private String myFileContentType; private String myFileFileName; public String execute() { /* Copy file to a safe location */ InsertImage.save(this); return SUCCESS; } public File getMyFile() { return Image; } public void setMyFile(File myFile) { this.Image = myFile; } public String getMyFileContentType() { return myFileContentType; } public void setMyFileContentType(String myFileContentType) { this.myFileContentType = myFileContentType; } public String getMyFileName() { return myFileFileName; } public void setMyFileName(String myFileFileName) { this.myFileFileName = myFileFileName; } }
而bean类如下:
public class InsertImage { public static int save(InsertImageBean iib) { try{ String filepath = "D:/TEAMWORK/NaTelangana/WebContent/Images"; File image = iib.getMyFile(); String myfilename = iib.getMyFileName(); System.out.println("Src File name: " + iib.getMyFileName()); System.out.println("Dst File name: " + myfilename); File destFile = new File(filepath, myfilename); // Null pointer exception is thrown here FileUtils.copyFile(image, destFile); System.out.println(System.getProperty("user.dir") ); if(image.renameTo(new File(filepath))) System.out.println("File is moved successful!"); else System.out.println("Failed to move!"); }catch(Exception e){ e.printStackTrace(); } return 0; } }
问题是,在上面的程序中,我在上面的程序中得到一个NullPointerException
:
File destFile = new File(filepath, myfilename);
问题是bean文件中没有收到发送的输入。 我该如何纠正这个错误?
这是我得到的错误:
java.lang.NullPointerException at java.io.File.(File.java:317) at natelangana.com.InsertImage.save(InsertImage.java:23) at bean.com.InsertImageBean.execute(InsertImageBean.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)Src File name: null Dst File name: null at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
-
将输入名称更改为以小写字符开头:
-
然后在Action中,您需要将File变量的名称添加到contentType和FileName字符串,如下所示:
private File image; private String imageContentType; private String imageFileName; /* GETTERS AND SETTERS FOR ALL OF THEM */
您可能还对如何为单个文件 (以及整个请求) 配置最大大小感兴趣, 仅允许上载某些类型的文件 ,或一次上载多个文件 。
编辑
您没有发布struts.xml和web.xml配置,而是发布了栈跟踪的行
在org.apache.struts2.dispatcher。 FilterDispatcher .doFilter(FilterDispatcher.java:395)
揭示你使用了错误的filter 。
此外,文件上传拦截器似乎被配置为运行两次……这通常在以错误的方式配置时发生,例如
2097152 image/png,image/gif,image/jpeg,image/pjpeg
代替
2097152 image/png,image/gif,image/jpeg,image/pjpeg
再次,在web.xml和struts.xml中仔细检查您的配置,它将自动运行。
尝试使用
标记而不是plain
您可以从简单文件上载示例开始,然后您可以查看上载文件的存储位置。 如果您设置了上传的文件名,则可以复制文件。 您可以在开始保存之前阻止空指针exception。
if (myFileFileName != null) InsertImage.save(this);
您还可以添加required
validation程序,该validation程序将在执行操作之前检查字段值。
- 如何在使用chrome driver / firefox驱动程序时更改Webdriver中的文件下载位置
- MultipartResolver不起作用
- Apache commons fileupload FileItemIterator hasNext()返回false
- Java Http Client通过POST上传文件
- 使用HttpClient4在上传文件中设置标题“Content-Type”时出现问题
- AmazonClientException:数据读取的长度与预期的不同
- Spring Framework是否支持多部分请求中的流模式
- Spring文件上传 – 获得预期的MultipartHttpServletRequest:是否配置了MultipartResolver? 错误
- 在struts 2中上传video