【问题标题】:Struts 2 Download - How to configure the file name dynamically?Struts 2 下载 - 如何动态配置文件名?
【发布时间】:2012-07-29 23:06:28
【问题描述】:

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

【问题讨论】:

    标签: java jquery struts2 struts-config struts-validation


    【解决方案1】:

    如果我是正确的,您想传递存储在数据库中的文件,如果是这种情况,您可以通过传递动作类中的所有这些参数来轻松完成此操作,例如

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

    【讨论】:

    • 谢谢你的回复,会不会下载和数据库里的名字完全一样的。
    • 是的,它会的,因为在这种情况下,您是在运行时从您的操作类传递文件名
    • 谢谢Umesh,我可以用实际文件名下载文件
    • @UmeshAwasthi +1 不错的解决方案。
    • 只是一个提示:contentDisposition 在 chrom 中不起作用,Opera 也使用 Content-Disposition!
    【解决方案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" })
    })
    

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多