【问题标题】:Build firefox extension (XPI package) using Java servlets使用 Java servlet 构建 firefox 扩展(XPI 包)
【发布时间】:2009-11-11 04:31:56
【问题描述】:

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

谢谢。

【问题讨论】:

  • 顺便说一句,我使用 JBoss 作为应用服务器。

标签: java firefox servlets xpi


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • xpi 只是一个扩展,它是一个 zip 文件,很像一个 jar 文件,它们都是美化的 zip 文件。
    【解决方案3】:

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

    同样Murali 建议您将Content-Length 设置为实际值。

    【讨论】:

      【解决方案4】:

      您应该能够使用ByteArrayOutputStream 获取内容长度。

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

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

      -比品

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多