Javascript 如何强制浏览器打开二进制响应的“另存为”对话框?

Javascript 如何强制浏览器打开二进制响应的“另存为”对话框?,javascript,http,zimbra,Javascript,Http,Zimbra,我正在开发Zimbra Zimlet。 我正在从Javascript请求JSP,两者都属于同一个Zimlet var jspUrl = this.getResource("my.jsp"); var callback = new AjxCallback(this, this._rpcCallback, ["param1", "param2"]); AjxRpc.invoke(null, jspUrl, null, callback, true); _rpcCallback函数 我需要返回一些二

我正在开发Zimbra Zimlet。 我正在从Javascript请求JSP,两者都属于同一个Zimlet

var jspUrl = this.getResource("my.jsp");
var callback = new AjxCallback(this, this._rpcCallback, ["param1", "param2"]);
AjxRpc.invoke(null, jspUrl, null, callback, true);
_rpcCallback函数

我需要返回一些二进制文件来响应这个请求。下面是JSP代码

<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.io.BufferedInputStream"  %>
<%@ page import="java.io.File"  %>
<%@ page import="java.io.IOException" %>

<%
    ServletOutputStream outStream=response.getOutputStream();
    File myfile = new File("/tmp/attachment.zip");
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition","attachment;filename=attachment.zip");
    response.setContentLength( (int) myfile.length( ) );
    FileInputStream input = new FileInputStream(myfile);
    BufferedInputStream buf = new BufferedInputStream(input);
    int readBytes = 0;
    while((readBytes = buf.read( )) != -1)
        outStream.write(readBytes);
    outStream.flush();
    outStream.close();
    buf.close();
%>
在rpcCallback函数中,我可以看到相应的响应头

HTTP/1.1 200 OK
Date: Fri, 03 May 2013 08:16:49 GMT
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Content-Type: application/octet-stream
Content-Length: 20021
Set-Cookie: JSESSIONID=11ebfk145b34z;Path=/zimlet
Content-Disposition: attachment;filename=attachment.zip
以及二进制响应体内容,但什么都没有发生

为了显示下载文件对话框而不是将文件打印为文本,rpcCallback函数必须包含哪些代码


使用Zimbra Desktop 7.2.2 GA进行测试

多亏了Julian,解决方案已经找到,而且太简单了:

window.open(fileUrl);

您是使用JS/Ajax还是通过导航到该资源来请求?只有后者得到内容处置治疗。你说得对,朱利安。谢谢
HTTP/1.1 200 OK
Date: Fri, 03 May 2013 08:16:49 GMT
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Content-Type: application/octet-stream
Content-Length: 20021
Set-Cookie: JSESSIONID=11ebfk145b34z;Path=/zimlet
Content-Disposition: attachment;filename=attachment.zip
window.open(fileUrl);