0

我是 ExtJS 和 Struts2 的新手。我的要求是当用户单击链接时下载文件(在新选项卡中的浏览器中保存文件或呈现内容)。下载前我不知道文件类型(可能是 pdf、gif、excel、zip 或其他文件)

我在AJAX请求下构造了一个调用动作:

    Ext.onReady( function() {
      Ext.Ajax.request({
        url : 'action/download.do',
        params : {
          loc : path
        },
        method : 'POST',
        success: function(response, request) {
          return;
        }
      });
    });

struts.xml配置:

    <action name="download" class="downloadAction" method="download" >
      <result name="success" type="stream">
        <param name="contentType">application/octet-stream</param>
        <param name="inputName">fileInputStream</param>
        <param name="contentDisposition">attachment;</param>
        <param name="bufferSize">1024</param>
      </result>
    </action>

动作代码:

    public String documentDownload() {
      String filePath = "/home/sasha/abc.pdf";
      try {
        fileInputStream =  new FileInputStream(new File(filePath));
      } catch (FileNotFoundException e) {
        LOGGER.error(e.getLocalizedMessage(), e);
      }
      return SUCCESS;
    }

当我在 Firebug 中验证响应时,它是“200 OK”。文件内容已以垃圾格式显示在“响应”选项卡下。

有人可以告诉我如何将内容保存为文件吗?

4

1 回答 1

0

您可以获取文件调用的内容类型contentType = ServletActionContext.getServletContext().getMimeType(file_name),然后contentType在您的 struts.xml 中用作参数。

顺便说一句,获取文件的 mime 类型的方法不止一种,请参见http://www.rgagnon.com/javadetails/java-0487.html

于 2012-10-03T10:01:14.267 回答