7

我正在开发一个应用程序,人们将从数据库中提到的位置下载所需的文件到他们的本地。我正在使用 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。请帮助我,因为我正处于我项目的非常关键的阶段。

4

2 回答 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 中使用此文件名的方式

于 2012-08-01T04:56:37.960 回答
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" })
})
于 2013-06-24T08:44:35.210 回答