我是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”。文件内容已以垃圾格式显示在“响应”选项卡下。
有人可以告诉我如何将内容保存为文件?
答案 0 :(得分:0)
您可以获取调用contentType = ServletActionContext.getServletContext().getMimeType(file_name)
的文件的内容类型,然后在struts.xml中使用contentType
作为参数。
BTW有多种方法可以获取文件的mime类型,请参阅http://www.rgagnon.com/javadetails/java-0487.html