2013-10-02 64 views
0

我已經成功上傳的文件在Struts2用下面的代碼:Struts2的文件上傳和保存

String filePath = servletRequest.getSession().getServletContext().getRealPath("/") + "WEB-INF\\files\\"; 
      fileToCreate = new File(filePath, getUserDocFileName()); 

      FileUtils.copyFile(this.userDoc, fileToCreate); 

的問題是,該文件被複制到\編譯\網絡\ WEB-INF \文件夾中。現在,當我嘗試使用結果類型的流來檢索文件:

String filePath = servletRequest.getSession().getServletContext().getRealPath("/") + "WEB-INF\\files\\"; 
File file = new File(filePath + getFileName()); 
      try { 
       inputStream = new DataInputStream(new FileInputStream(file)); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 



<action name="loadFile" class="com.app.Controller" method="loadFile"> 
      <result name="success" type="stream"> 
       <param name="contentType">${fileType}</param> 
       <param name="inputName">inputStream</param> 
       <param name="contentDisposition">inline;filename="${fileName}"</param> 
       <param name="bufferSize">1024</param> 
      </result> 
      <interceptor-ref name="defaultStack"/> 
     </action> 

我得到以下異常:

java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 

關於這個問題的任何幫助嗎?

FileUtils.copyFile方法與設置struts.multipart.saveDir屬性相同嗎?

如何將文件放置在WEB-INF文件夾中但不在生成文件夾中?

當我再次構建項目時,不應刪除文件。我想稍後將它部署到OpenShift。

+0

您可以指定比'WEB-INF'等其他位置得到它? –

+0

@RomanC我希望文件不能從任何地方訪問。這就是爲什麼我把它們放在WEB-INF下。如果這些文件可以在外部安全,那麼我會這樣做 – user2589197

+0

我認爲你錯了,它可以從任何地方訪問文件訪問權限,但不受應用程序訪問權限的限制。 –

回答

0

嘗試從servlet上下文

InputStream is = ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/files/" + fileName); 
+0

我將如何設置$ {fileType}和$ {fileName}? – user2589197

+0

爲屬性'contentType'和'fileName'創建getter和setter,這是struts2的fileupload還是servlet? –

+0

不介意這是文件下載,我剛剛發現它們是結果的動態參數,需要獲取。這不是EL表達。 –