使用Struts上传图片 [英] Uploading image using Struts

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

问题描述

我刚开始练习struts,所以我对这个框架有点新鲜。所以,我想要做的就是使用这个JSP文件上传一个图像:


$ b

 < ;%@ page contentType =text / html; charset = UTF-8%> 
<%@ taglib prefix =suri =/ struts-tags%>

< html>
< head>
< title>上传用户图片< / title>
< / head>

< body>
< h2> Struts2文件上传& amp;保存示例< / h2>

< s:actionerror />

< td>图片:< / td>< td>< input type =filename =Image>< / td>
< s:submit value =Uploadalign =center/>
< / s:form>
< / body>
< / html>

而动作类如下:

  public class InsertImageBean extends ActionSupport {

private static final long serialVersionUID = 1L;

私有文件图像;
私人字符串myFileContentType;
private String myFileFileName;

public String execute()
{
/ *将文件复制到安全的位置* /

InsertImage.save(this);

返回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;






$ b

和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文件名:+ myfilename);

文件destFile =新文件(filepath,myfilename); //空指针异常在这里抛出
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;






$ b问题是,在上面的程序中,

 文件destFile =  NullPointerException 新的文件(filepath,myfilename); 

问题是发送的输入在bean文件中没有被接收到。







$ b

这是我得到的错误:

。< init>(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。 (NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:在com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440 606)

。在com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
。在玉米.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.jav a:242)Src文件名:null
Dst文件名:null
$ b $ at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
处com.opensymphony.xwork2 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
。在org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
(AnnotationValidationInterceptor.java:68)
。在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 co m.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
处com.opensymphony.xwork2 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
。我们可以通过下面的例子来说明如何使用这个方法来实现这个功能。 ParametersInterceptor.java:195)美元,com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87 b $ b)
在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.strut s2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
处org.apache.struts2.interceptor.FileUploadInterceptor com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
。截距(FileUploadInterceptor.java:306)
。在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
。在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)
在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
在org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
在com.opensymphony.xwork2 .DefaultActionIn vocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:236)美元,com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126 b $ b)
在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)
在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
在com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
在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)
在org.apache.struts2.dispatcher.Dispatcher.serviceA ction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain。 Java的:243)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在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)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
在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)
在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:302)
在java.util中(ThreadPoolExecutor.java:615)$ b $ java.util.run(Thread .java:744)


解决方案




  1. 将您的输入名称更改为以小写字母开头:

     < input type =filename =image>然后在Action中,你需要将File变量的名字前置到contentType和FileName字符串中,如下所示: 

    private文件图像;
    private String imageContentType;
    private String imageFileName;
    $ b $ * /
    / code / pre / $>

您也可能对如何配置单个文件的最大大小感兴趣(以及整个请求),仅允许上传某些类型的文件,或者一次上传多个文件

编辑 您没有发布您的struts.xml和web。 xml配置,但stacktrace的行


在org.apache.struts2.dispatcher。 FilterDispatcher .doFilter(FilterDispatcher.java:395)

揭示了您正在使用错误的过滤器。另外,文件上传拦截器似乎被配置为运行两次...这通常发生在配置错误的方式,如

<! - WRONG - >
< interceptor-ref name =fileUpload>
< param name =maximumSize> 2097152< / param>
< param name =allowedTypes>
image / png,image / gif,image / jpeg,image / pjpeg
< / param>
< / interceptor-ref>
< interceptor-ref name =defaultStack/>

而不是

 <! -  RIGHT  - > 
< interceptor-ref name =defaultStack>
< param name =fileUpload.maximumSize> 2097152< / param>
< param name =fileUpload.allowedTypes>
image / png,image / gif,image / jpeg,image / pjpeg
< / param>
< / interceptor-ref>

再一次仔细检查web.xml和struts.xml中的配置,它会自动运行。

I just started practicing struts, so I'm kinda new to this framework. So, what I'm trying to do is upload an image using this JSP file :

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
  <head>
    <title>Upload User Image</title>
  </head>

  <body>
    <h2>Struts2 File Upload &amp; Save Example</h2>

    <s:actionerror />
    <s:form action="imageinsert.action" method="post" enctype="multipart/form-data">

      <td>Image : </td><td><input type="file" name="Image"></td> 
      <s:submit value="Upload" align="center" />
    </s:form>
  </body>
</html>

And the action class is as follows :

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;
    }
}

And the bean class is as follows :

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;
    }
}

Problem is, in the above program I'm getting a NullPointerException in the program above near this line:

File destFile  = new File(filepath, myfilename);

The problem is the input sent is not being received in the bean file. How do I rectify this error ?

This is the error I'm getting :

java.lang.NullPointerException
    at java.io.File.<init>(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)

解决方案

  1. Change your input name to begin with a lowercase character:

    <input type="file" name="image">
    

  2. Then in Action you need to prepend the File variable's name to the contentType and FileName Strings, as follows:

    private File image;
    private String imageContentType;
    private String imageFileName;
    
    /* GETTERS AND SETTERS FOR ALL OF THEM */
    

You may also being interested in how to configure the maximum size for a single file (and for the entire request), allow only certain kind of files to be uploaded, or upload multiple files at once.

EDIT

You didn't post your struts.xml and web.xml configuration, but the line of the stacktrace

at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

unveils that you are using the wrong Filter.

Also the File Upload Interceptor seems to be configured to run twice... and this usually happens when configuring it the wrong way, like

<!-- WRONG  -->
<interceptor-ref name="fileUpload">
    <param name="maximumSize">2097152</param>
    <param name="allowedTypes">
        image/png,image/gif,image/jpeg,image/pjpeg
    </param>            
</interceptor-ref>
<interceptor-ref name="defaultStack" />

instead of

<!-- RIGHT  -->
<interceptor-ref name="defaultStack">
    <param name="fileUpload.maximumSize">2097152</param>
    <param name="fileUpload.allowedTypes">
        image/png,image/gif,image/jpeg,image/pjpeg
    </param>            
</interceptor-ref>

Again, check carefully your configuration both in web.xml and struts.xml, it will work automatically.

这篇关于使用Struts上传图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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