2012-01-30 2 views
0

В моем приложении Struts2 у меня есть страница, в которой перечислены имена файлов, при нажатии на это имя файла будет загружен этот файл. Здесь имя файла происходит из db. для этого я закодированы какЗагрузка динамического файла в Struts2

<iterator list... 
<a href="filedownload.action?filepath=${filepath}>${filepath} </a> 
</iterator... 

в действии FileDownload я написал коды с открытым FileStream (struts2 filedownalod).

Он работает во всех браузерах, кроме Firefox7 +. его метание **"Content correpted Error"**.

ответ

1

Я думаю, что у него есть проблема с кодировкой URL. Я не думаю, что это хорошая идея, чтобы передать путь в качестве параметра. Безопасно передавать идентификатор базы данных в действие и загружать FileInputStream. По крайней мере, вы можете проверить разрешение пользователя, когда он собирается загружать привилегированные файлы.

Я хотел бы сделать так:

<iterator list... 
<a href="filedownload?id=%{id_in_the_database} </a> 
</iterator... 

класс Действие

public String download() throws Exception { 

    fileName = getFromDatabaseById(id); 

    try 
    { 
     fileInputStream = new FileInputStream(new File(FILE_FOLDER + filename)); 
    } 
    catch(FileNotFoundException ex) 
    { 
     logger.error(this.getClass().getSimpleName() + ": File in " + FILE_FOLDER + filename + " cannot be found."); 
      return ERROR; 
     } 

     return DOWNLOAD; 
} 

И в вашем struts.xml

<action name="filedownload" method="download" class="com.yourproject.filedownload"> 
    <result name="download" type="stream"> 
     <param name="contentType">application/octet-stream</param> 
     <param name="inputName">fileInputStream</param> 
     <param name="contentDisposition">attachment;filename=%{filename}</param> 
     <param name="bufferSize">4096</param> 
    </result> 
    <result name="error" type="redirectAction">erroraction</result> 
</action>