1

我正在尝试使用 Java servlet 构建一个 xpi 文件。如果我使用 servlet 中的以下代码将 xpi 作为 zip 返回 -

response.setContentType("application/zip");
response.setHeader("Content-Disposition","inline;filename=xpitest.xpi;"); 

上面的代码一切正常。我可以将文件保存到文件系统并安装它。

但是,如果我尝试返回具有以下标题和内容类型的文件 -

response.setContentType("application/x-xpinstall");
response.setHeader("Content-Disposition","filename=xpitest.xpi;");

在客户端,firefox 识别出该文件是 xpi 包并显示安装选项。但是,当我尝试安装它时,我收到此错误 - “不是有效的安装包 - 207”

有人可以建议我需要为 setContentType() 和 setHeader() 使用什么吗?

谢谢。

4

4 回答 4

1

单击“添加到 Firefox”后,来自 addons.mozilla.org 的流量嗅探表明,您所需要的只是将 Content-Type 设置为 application/x-xpinstall 和正确的 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
于 2009-11-11T04:57:34.333 回答
0

您的第二个响应Content-Disposition字段缺少inline关键字,这可能是原因吗?

同样正如Murali建议的那样,您应该设置Content-Length为实际值。

于 2009-11-11T18:28:46.890 回答
0

您应该能够使用ByteArrayOutputStream.

您的 servlet 应该将文档写入 a ByteArrayOutputStream,完成后查看其大小,将其放入Content-Length字段中。

然后通过 发送内容byteArrayStream.writeTo(response.getOutputStream())

-比品

于 2009-11-16T18:01:40.537 回答
0

这是一个猜测,但是,由于您返回的是压缩的 .xpi,而不是 .xpi,我想您必须使用 application/zip?如果 .xpi 本质上不是压缩的,那么压缩的 .xpi 本身确实是无效的。不压缩发送怎么样?

于 2009-11-11T09:59:27.773 回答