【问题标题】:Downloaded attachment doesn't show correct extension name下载的附件未显示正确的扩展名
【发布时间】:2014-09-15 07:15:36
【问题描述】:

我使用 postgresql 作为后端。我在 case_attachments 表中保存了附件和附件标题。 当我点击下载附件时,它会下载它。但是附件名称是这样的 downloadAttachFile 和类型为 action 。我会保存多种类型的附件,例如 jpg、pdf、doc 等。因此,在下载时,文件名和扩展名正确很重要。

这是我的 struts.xml

        <action name="downloadAttachFile" class="abc.actions.mypackage" method="downloadAttachFile">
        <result name="success" type="stream">
        <param name="contentType">application/octet-stream/text/plain/doc</param>
        <param name="inputName">fileInputStream</param>
        <param name="contentDisposition">attachment;filename=%{AttachFileName}</param>
        <param name="bufferSize">1024</param>           
        </result>               
    </action> 

以及动作方法

    public String downloadAttachFile() throws FileNotFoundException {
    String AttachFileName = ServletActionContext.getRequest().getParameter("myFileFileName");
    fileInputStream = new FileInputStream(new File(AttachFileName));
    return SUCCESS;
}

当我右键单击并使用正确的工具打开它时,它会正确打开。所以这里唯一的问题是名称和扩展类型。

【问题讨论】:

    标签: java postgresql struts2 download attachment


    【解决方案1】:

    不清楚为什么,如果你从数据库中检索它,你是从请求中读取它...顺便说一句:

    1. 您的操作属性必须是私有的,在类级别(而不是像您所做的那样在方法级别声明),带有 getter,并且以小写字符开头以遵循约定:

      private String attachFileName;
      
      public String getAttachFileName(){
          return attachFileName;
      }
      
      public String downloadAttachFile() throws FileNotFoundException {
          attachFileName = ServletActionContext.getRequest().getParameter("myFileFileName");
          fileInputStream = new FileInputStream(new File(AttachFileName));
          return SUCCESS;
      }
      
    2. 您需要存储、检索和设置真实、正确的contentType。这个:

      <param name="contentType">application/octet-stream/text/plain/doc</param>
      

      是一个怪物,可能会将您的浏览器变成噩梦生成器。

    【讨论】:

    • 我更改了内容类型:application/octet-stream 并按照你所说的休息。它工作得非常棒。非常感谢。
    • 不客气。您的 contentType 正在工作,因为您将其下载为 attachment,如果尝试使用 inline 在浏览器中打开它,它将无法正常工作(尽管 application/octet-stream 是在来源未知时使用的正确 contentType.. .)。保存文件时考虑存储正确的 contentType,否则当您第一次尝试在浏览器中显示文件时,您会遇到许多 Mime 类型的问题。
    • 我一定会记录下来的。再次感谢您的帮助。
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2012-08-21
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多