2010-03-13 7 views
1

struts2 업로드 방법에서 업로드 된 파일을 저장해야하는 위치를 선택할 수 있습니까? 내 말은, 웹에있는 모든 예는 확실히 좋은 생각이 아닌 WEB-INF에 저장하도록 요청합니다. 업로드 된 파일을 디스크의 어느 위치 에나 저장할 수 있기를 원합니다.struts2를 사용하여 웹 응용 프로그램에서 파일 업로드 및 다운로드

어떻게해야합니까? ServletContextAware 인터셉터의 도움으로이 작업을 수행 할 수 있습니까? 내가

public class DownloadFileAction extends ActionSupport implements ServletContextAware{ 
    //private InputStream inputStream; 
    private int fileid; 
    private ServletContext servletContext; 
    private FileCrud fileCrud; 
    private MyFile myFile; 

    public FileCrud getFileCrud() { 
     return fileCrud; 
    } 
    public void setFileCrud(FileCrud fileCrud) { 
     this.fileCrud = fileCrud; 
    } 
    public MyFile getMyFile() { 
     return myFile; 
    } 
    public void setMyFile(MyFile myFile) { 
     this.myFile = myFile; 
    } 
    public InputStream getInputStream(){ 

     String homepath = "c:\\files"; 
     String fname = null; 
     try{ 
      fname=getFileCrud().getAFileName(getFileid()); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     String thePathToFile = homepath+File.separator+fname; 
     //File targetfile = new File(thePathToFile); 

     return getServletContext().getResourceAsStream(thePathToFile); 
    } 
// public void setInputStream(InputStream inputStream) { 
//  this.inputStream = inputStream; 
// } 
    public int getFileid() { 
     return fileid; 
    } 
    public void setFileid(int fileid) { 
     this.fileid = fileid; 
    } 
    public ServletContext getServletContext() { 
     return servletContext; 
    } 
    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 
    public String execute(){ 
     return SUCCESS; 
    } 

} 

를 사용하여 XML 파일을 스트럿

<action name="fileDownload" class="com.projit1.file.DownloadFileAction"> 
      <result type="stream" name="success"> 
       <param name="inputName">inputStream</param> 
       <param name="contentType">application/octet-stream</param> 

      </result> 
     </action> 

은 내가 노력하고 있지만 어떤 결과를 얻고 있지 않다

javax.servlet.ServletException: 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. 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) 
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) 

다음과 같은 오류를 얻을 수 있습니다 .. 무엇을 이게 잘못 됐어?

답변

0

InputStreamFile에 쓰려면 FileOutputStream이 필요합니다.

File에서 InputStream을 얻으려면 FileInputStream이 필요합니다.

코드에서 ServletContext#getResourceAsStream()을 사용하여 파일을 할당하려하지만 클래스 패스 리소스를 할당하려고합니다. new FileInputStream(file)으로 교체하십시오.

0

방금 ​​직접 구현을 완료했습니다. 나는 두 가지 문제를 별도로 다루는 것이 좋습니다. 먼저 파일을 업로드 한 다음 파일을 다운로드합니까? 다운로드 지원에 대한 즉각적인 문제는 결과 설정 당 public getInputStream() 방법이 없음을 의미합니다.

<param name="inputName">inputStream</param> 
관련 문제