我正在尝试使用Java servlet构建一个xpi文件。 如果我使用servlet中的以下代码将xpi作为zip返回 -
response.setContentType("application/zip");
response.setHeader("Content-Disposition","inline;filename=xpitest.xpi;");
上面的代码一切正常。我可以将文件保存到文件系统并安装它。
但是,如果我尝试使用以下标题和contenttype -
返回该文件response.setContentType("application/x-xpinstall");
response.setHeader("Content-Disposition","filename=xpitest.xpi;");
在客户端,firefox识别该文件是xpi包并显示Install选项。但是,当我尝试安装它时,我收到此错误 - “不是有效的安装包 - 207”
有人可以建议我需要使用setContentType()和setHeader()吗?
感谢。
答案 0 :(得分:1)
点击“添加到Firefox”后,来自addons.mozilla.org的流量嗅探显示您需要的只是设置为application / x-xpinstall的Content-Type和正确的Content-Length。你也可以试试。以下是标题:
HTTP/1.1 200 OK
Date: Wed, 11 Nov 2009 04:51:03 GMT
Server: Apache
Last-Modified: Thu, 05 Nov 2009 15:10:39 GMT
Accept-Ranges: bytes
Content-Length: 4248
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: application/x-xpinstall
答案 1 :(得分:0)
这是猜测,但是,既然你要返回一个压缩的.xpi,而不是.xpi,我想你必须使用application / zip?如果.xpi本质上没有拉链,则拉链.xpi本身无效。如何将其解压缩?
答案 2 :(得分:0)
您的第二个回复Content-Disposition
字段缺少inline
个关键字,这可能是个原因吗?
同样,Murali建议您将Content-Length
设置为实际值。
答案 3 :(得分:0)
您应该可以使用ByteArrayOutputStream
获取内容长度。
你的servlet应该将文档写入ByteArrayOutputStream
,完成后查看其大小,将其放入Content-Length
字段。
然后通过byteArrayStream.writeTo(response.getOutputStream())
发送内容。
-Bipin