2014-09-09 6 views
0

Я только начал практиковать стойки, поэтому я новичок в этой структуре. Итак, что я пытаюсь сделать, это загрузить изображение, используя этот JSP-файл:Загрузка изображения с помощью Struts

<%@ 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> 

и класс действий выглядит следующим образом:

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

и класс бина следующим образом:

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

Проблема заключается в том, что входной сигнал не принимается в файле компонента. Как исправить эту ошибку?

Это ошибка, я получаю:

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

Имя вашего файла в jsp is 'Image ', но в этом классе нет класса getter/setter. –

+0

Изменен, но все та же ошибка – Karthik

ответ

1
  1. Измените имя входа, чтобы начать со строчным характером:

    <input type="file" name="image"> 
    
  2. Тогда в действии вы должны предварять имя переменной файла, чтобы в CONTENTTYPE и FileName строк следующим образом:

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

Вы также можете быть заинтересованы в how to configure the maximum size for a single file (и для всего запроса), allow only certain kind of files на или upload multiple files at once.

EDIT

Вы не отправлял свой struts.xml и конфигурацию web.xml, но линию StackTrace

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

раскрывает, что you are using the wrong Filter.

Также File Upload перехватчик, кажется, настроен на два запуска ... и это обычно происходит при настройке это неправильный путь, как

<!-- 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, она будет работать автоматически.

+0

Я настроил эти данные в struts.xml с помощью перехватчика. – Karthik

+0

Полезно знать. Как насчет ответа? Это сработало? –

+0

Нет, это не сработало – Karthik

0

Попробуйте использовать <s:file name="Image"/> тег вместо простого <input/>

+0

Пробовал, что тоже .. Еще одна проблема – Karthik

0

Вы можете начать с простого file upload example, после чего вы можете увидеть, где хранился загруженный файл. Если вы установили имя загруженного файла, вы можете скопировать файл. Вы можете исключить исключение нулевого указателя перед тем, как начать сохранять.

if (myFileFileName != null) 
    InsertImage.save(this); 

Вы также можете добавить required валидатор, который будет проверять значение поля, прежде чем ваше действие будет выполнено.

Смежные вопросы