【发布时间】:2016-01-27 07:57:06
【问题描述】:
如果用户在我的网页上按下公式按钮,我想创建一个 Excel 文件。我的第一个解决方案工作正常。用户按下按钮,服务器端 java 代码创建文件,java 代码执行后,webbrowser 打开一个对话框,询问用户是显示还是保存 excel 文件。
但是我从客户那里得到了一些新的要求。如果用户按下公式按钮,则需要在服务器端 java 代码执行时显示动画 gif 图像,如果服务器端 java 代码完成,动画 gif 必须立即消失。
这是 Struts2 提交按钮,如果该按钮被按下,它将启动 HTTP 请求:
<s:submit value="show Data" onclick="myJsFunction(); return false;" />
这是客户端代码,它创建 HTTP 请求并将其发送到我的 Struts2 Actionclass:
function myJsFunction(){
$.ajax({
type: "POST",
dataType: 'binary',
url: "myActionClass.action",
data: {//some necessary input values},
success: function(data){
console.log(data);
// js code to disappeared the animated gif image
}
});
}
这是创建二进制代码的 Java 代码:
private void returnExcelFileAsStream(final String filename) throws IOException {
final InputStream is = new FileInputStream(filename);
OutputStream os = null;
try {
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "maxage=3600");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
os = response.getOutputStream();
int len;
byte buf[] = new byte[1024];
while ((len = is.read(buf)) > 0) {
os.write(buf, 0, len);
}
is.close();
os.close();
}
catch(Exception e){
// some exeception handling
}
}
这是Struts2的执行方法,它调用了returnExcelFileAsStream方法。
public String execute(){
// some Java code
returnExcelFileAsStream("MyExcelFile.xlsx")
return null;
}
这是我的 struts.xml 文件:
<action name="myActionClass" class="myPackage.myActionClass">
<result name="input" type="redirectAction">/WEB-INF/base/jsp/myJspPage.jsp</result>
</action>
现在有一个问题,网络浏览器没有打开用户对话框,要求用户显示或保存文件。使用 firebug,我在 HTTP 响应中看到了一些神秘字符。我怎么解决这个问题?
【问题讨论】: