2009-11-11 39 views
1

我想用Java servlet構建一個xpi文件。 如果我返回XPI爲使用下面的代碼在servlet拉鍊 -使用Java servlets構建firefox擴展(XPI包)

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;"); 

在客戶端,火狐識別該文件是一個XPI包,並顯示安裝選項。但是,當我嘗試安裝它,我得到這個錯誤 - 「不是有效的安裝包 - 207」

有人可以建議我需要使用setContentType()和setHeader()?

謝謝。

+0

順便說一句,我使用JBoss作爲應用服務器。 – user162916 2009-11-11 04:33:27

回答

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 
0

這是一個猜測,但是,因爲你是返回一個壓縮的.xpi,不是的.xpi,我想你必須使用應用程序/壓縮?如果一個.xpi本身不是壓縮的,那麼確實一個壓縮的.xpi本身是無效的。如何將它解壓縮?

+1

xpi只是一個擴展它是一個zip文件,非常像一個jar文件,它們都是美化zip文件。 – 2009-11-11 15:35:06

0

第二個響應Content-Disposition字段缺少一個inline關鍵字,這可能是一個原因嗎?

也作爲Murali建議您應將Content-Length設置爲實際值。

0

您應該能夠使用ByteArrayOutputStream獲取內容長度。

你的servlet應該在文件寫入到ByteArrayOutputStream,在完成時查找它的大小,將其寫入Content-Length領域。

然後通過byteArrayStream.writeTo(response.getOutputStream())發送內容。

-Bipin