Struts2中的动态文件下载

时间:2012-01-30 07:36:49

标签: java firefox struts2 download

在我的Struts2应用程序中,我有一个文件名列表的页面,以该文件名为单位将下载该文件。其中文件名来自db。因为我编码像

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

在filedownload操作中我已经编写了代码打开文件流(struts2 filedownalod)。

除Firefox7 +外,它适用于所有浏览器。它投掷**"Content correpted Error"**

1 个答案:

答案 0 :(得分:1)

我认为它在URL编码方面存在一些问题。我不认为将路径作为参数传递是个好主意。将数据库上的ID传递给操作并通过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>