Динамическая загрузка файлов в Struts2 - PullRequest
0 голосов
/ 30 января 2012

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

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

в действии загрузки файла, я написал коды, открывающие поток файлов (struts2 filedownalod).

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

1 Ответ

1 голос
/ 30 января 2012

Я думаю, что есть некоторые проблемы с кодировкой 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>
...