2010-03-13 1 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

Чтобы написать InputStream на номер File, вам необходимо FileOutputStream.

Чтобы получить InputStream с File, вам необходимо FileInputStream.

В вашем коде вы пытаетесь выделить файл с помощью ServletContext#getResourceAsStream(), но это намерение выделить ресурс пути к классам. Замените его на new FileInputStream(file).

0

Только что закончил реализацию этого. Я предлагаю решить две проблемы отдельно. Сначала загружает файл, а затем загружает файл. Одна из проблем, связанных с поддержкой загрузки, заключается в том, что у вас нет метода public getInputStream() по вашей конфигурации результатов:

<param name="inputName">inputStream</param> 
Смежные вопросы