使用Struts2和ExtJS下载文件

时间:2012-10-01 11:55:37

标签: extjs struts2

我是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”。文件内容已以垃圾格式显示在“响应”选项卡下。

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

1 个答案:

答案 0 :(得分:0)

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

BTW有多种方法可以获取文件的mime类型,请参阅http://www.rgagnon.com/javadetails/java-0487.html