1

Java サーブレットを使用して xpi ファイルを作成しようとしています。サーブレットで次のコードを使用して、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 パッケージであることを認識し、インストール オプションを表示します。しかし、インストールしようとすると、「有効なインストール パッケージではありません - 207」というエラーが表示されます。

setContentType() と setHeader() に何を使用する必要があるかを誰かが提案できますか?

ありがとう。

4

4 に答える 4

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
于 2009-11-11T04:57:34.333 に答える
0

これは推測ですが、.xpiではなくzip形式の.xpiを返すので、application / zipを使用する必要があると思いますか?.xpiが本来zip形式ではない場合、実際にzip形式の.xpiはそれ自体では無効です。圧縮せずに送ってみませんか?

于 2009-11-11T09:59:27.773 に答える
0

2 番目の回答Content-Dispositionフィールドにinlineキーワードがありません。これが原因でしょうか?

また、ムラリが提案Content-Lengthしたように、実際の値に設定する必要があります。

于 2009-11-11T18:28:46.890 に答える
0

を使用してコンテンツの長さを取得できるはずですByteArrayOutputStream

サーブレットはドキュメントを に書き込み、ByteArrayOutputStream完了したらそのサイズを調べ、それをフィールドに入れる必要がありContent-Lengthます。

次に、 経由でコンテンツを送信しますbyteArrayStream.writeTo(response.getOutputStream())

-ビピン

于 2009-11-16T18:01:40.537 に答える