使用Java servlet构建firefox扩展(XPI包)

时间:2009-11-11 04:31:56

标签: java firefox servlets xpi

我正在尝试使用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()吗?

感谢。

4 个答案:

答案 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