我正在开发一个应用程序,人们会将所需文件从数据库中提到的位置下载到本地。我使用struts 2从服务器下载文件。我可以毫无例外地下载文件,它完美无缺。 但下载的文件具有我在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。请帮我解决这个问题,因为我处于项目的关键阶段。
答案 0 :(得分:13)
如果我是正确的,你想要传递存储在你的数据库中的文件,如果是这种情况,你可以通过从你的动作类中传递所有这些参数来轻松完成这项工作,如
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中使用此文件名的方法
答案 1 :(得分:1)
对于struts中的注释,同样如此。解决方案非常有用。谢谢。对我来说,“contentType”并没有多大区别。
@Action(value = "/download", results = { @Result(name = "success", type = "stream",
params= {"contentType", "application/octet-stream", "inputName","fileInputStream",
"contentDisposition","attachment; filename=\"${fileName}\"", "bufferSize", "1024" })
})