2013-10-29 28 views
0

在這裏我上傳文件,我想讀取文件類型和文件擴展名,但是當我給文件獲取FileUtils.copyFile(this.uploadFile,fileToCreate)附近的空指針異常;可能有人PLZ解決這個問題...我得到空指針異常上傳文件使用struts2

public class ImportAction extends ActionSupport implements ServletRequestAware { 

    private static final long serialVersionUID = 1L; 
    private File uploadFile; 
    private String uploadFileName; 
    private String uploadContentType; 
    private HttpServletRequest servletRequest; 

    public File getUploadFile() { 
     return uploadFile; 
    } 

    public void setUploadFile(File uploadFile) { 
     this.uploadFile = uploadFile; 
    } 

    public String getUploadFileName() { 
     return uploadFileName; 
    } 

    public void setUploadFileName(String uploadFileName) { 
     this.uploadFileName = uploadFileName; 
    } 

    public String getUploadContentType() { 
     return uploadContentType; 
    } 

    public void setUploadContentType(String uploadContentType) { 
     this.uploadContentType = uploadContentType; 
    } 
    RegisterDAO dao = new RegisterDAO(); 

    /** 
    * 
    * @return 
    * @throws 
    * Exception 
    */ 
    @SuppressWarnings("unchecked") 
    @Override 
    public String execute() throws Exception { 
     try { 
      String filePath = servletRequest.getSession().getServletContext().getRealPath("/"); 
      System.out.println("Server path:" + filePath); 
      File fileToCreate = new File(filePath, this.uploadFileName); 
      FileUtils.copyFile(this.uploadFile, fileToCreate); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      addActionError(e.getMessage()); 
      return INPUT; 
     } 
     Model m = new Model(); 
     String result = m.fileimport(uploadFile, uploadFileName); 
     if (result.equals(SUCCESS)) { 
      return SUCCESS; 
     } else { 
      addActionError(getText(result)); 
      return "failure"; 
     } 
    } 

    @Override 
    public void validate() { 
     System.out.println("inside validate of LA"); 
    } 

    @Override 
    public void setServletRequest(HttpServletRequest hsr) { 
     this.servletRequest = hsr; //To change body of generated methods, choose Tools | Templates. 
    } 
} 

這是我的jsp頁面

<s:form method="post" action="file" enctype="multipart/form-data"> 
      <s:file label="choose file" name="uploadFile"></s:file> 
      <s:submit></s:submit> 
     </s:form> 

我有我的打印文件的路徑及其未來像這樣 filepathD:\蘭芝斯\ ranjithdemo3 \編譯\網絡\

+0

您還沒有初始化uploadFile和uploadFileName ..還是不共享代碼alteast –

+0

可以üPLZ告訴我該怎麼做,多虧 – user2930535

+0

哪裏初始化一個 – user2930535

回答

0

請檢查;相對於HTML表單

  1. 字段名的ActionServlet
  2. 檢查ENC型與HTML形式
+0

可能會plz看到我的更新 – user2930535

0

檢查是否從uploadContentTypeuploadFileContentType作品重命名你的Action類的內容類型字段。 同時將uploadFileName更改爲uploadFileFileName

也改變相應的getter和setter。我不確定是否導致問題。所以這是更多類型的試驗和錯誤建議。

更新: 看來你正在通過GET操作獲得NPE。

之前您try塊添加以下代碼:

if(!servletRequest.getMethod().equalsIgnoreCase("POST")){ 
    return INPUT; 
} 

這是不是很優雅,但應該在這個例子中工作。我已經檢查過了。 :)

+0

我已經改變和檢查,但那不工作... – user2930535

+0

畝文件路徑即將到來這樣filepathD:\ ranjith \ ranjithdemo3 \ build \ web \ – user2930535

+0

和文件名 - 它是否爲非空? – Atul

1

這是這個代碼在不到24小時內的第三個問題......這是由一個在線arcticle?你能在這裏報告嗎?

BTW,主要的問題是,在上傳文件,Struts2的,通過fileUploadInterceptor,必須遵守以下結構

private File <filevarname>; 
private String <filevarname>FileName; 
private String <filevarname>ContentType; 

所以如果你<filevarname>是一個 「UploadFile」,你應該有

private File uploadFile; 
private String uploadFileFileName; 
private String uploadFileContentType; 

如果改爲「上傳」,應該是

private File upload; 
private String uploadFileName; 
private String uploadContentType; 

對我來說更具可讀性。