Struts 2下载 - 如何动态配置文件名?

8
我正在开发一个应用程序,人们可以从数据库中指定的位置下载所需文件到本地。我使用struts2从服务器上下载文件。我可以成功下载文件而且没有任何异常。但是下载的文件名称和我在struts.xml中指定的名称不同,我希望下载的文件名称与实际的文件名相同。例如,如果原始文件名为struts.pdf,我下载的文件名为download.pdf,如何避免这种情况,使用实际的文件名进行下载?
我的struts.xml配置如下:
<action name="download" class="action.DownloadAction">
        <result name="success" type="stream">
            <param name="contentType">application/octet-stream</param>
            <param name="inputName">fileInputStream</param>
            <param name="contentDisposition">attachment;filename="download.log"</param>
            <param name="bufferSize">1024</param>
        </result>
        <result name="error">/live/useradminerror.jsp</result>
    </action> 

我忘了提到我正在使用struts2-jquery来开发UI。请在这方面帮助我,因为我处于项目的关键阶段。

2个回答

14

如果我理解正确,您想传递存储在数据库中的文件。如果是这种情况,您可以通过从操作类传递所有这些参数轻松地实现这一点,例如:

class MyFileDownloadAction extends ActionSupport{

     private String fileName;
     // getter and setter

    public String fileDownload() throws exception{
      // file download logic
      fileName ="abc"  // can set name dynamic from DB
   }

}

<action name="download" class="action.DownloadAction">
        <result name="success" type="stream">
            <param name="contentType">application/octet-stream</param>
            <param name="inputName">fileInputStream</param>
            <param name="contentDisposition">attachment;filename="${filename}"</param>
            <param name="bufferSize">1024</param>
        </result>
        <result name="error">/live/useradminerror.jsp</result>
    </action> 
您可以在struts.xml类中动态传递每个参数。希望这能帮到您。 以下是您将如何在XML中使用此文件名。

谢谢您的回复,它会下载与数据库中完全相同的名称吗? - Esh
1
是的,它会,因为在这种情况下,您正在从操作类中运行时传递文件名。 - Umesh Awasthi
谢谢Umesh,我可以下载带有实际文件名的文件。 - Esh
小提示:contentDisposition在Chrome和Opera中不起作用,请使用Content-Disposition! - Alireza Fattahi

2

对于Struts中的注释,情况是相同的。这个解决方案非常有帮助。谢谢。对我来说,“contentType”并没有太大的区别。

@Action(value = "/download", results = { @Result(name = "success", type = "stream", 
params= {"contentType", "application/octet-stream", "inputName","fileInputStream",    
"contentDisposition","attachment; filename=\"${fileName}\"", "bufferSize", "1024" })
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接