Создание расширения Firefox (пакет XPI) с использованием Java-сервлетов. - PullRequest
1 голос
/ 11 ноября 2009

Я пытаюсь создать файл xpi, используя сервлет Java. Если я верну xpi в виде почтового индекса, используя следующий код в сервлете -

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, и показывает параметр Install. Но, когда я пытаюсь установить его, я получаю эту ошибку - «Неправильный установочный пакет - 207»

Может кто-то предложить, что мне нужно использовать для setContentType () и setHeader ()?

Спасибо.

Ответы [ 4 ]

1 голос
/ 11 ноября 2009

Анализ трафика с addons.mozilla.org после нажатия на «Добавить в Firefox» показывает, что все, что вам нужно, это 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 голосов
/ 16 ноября 2009

Вы можете получить длину содержимого, используя ByteArrayOutputStream.

ваш сервлет должен записать документ в ByteArrayOutputStream, посмотреть его размер, когда это будет сделано, поместить его в поле Content-Length.

Затем отправьте контент через byteArrayStream.writeTo(response.getOutputStream()).

-Bipin

0 голосов
/ 11 ноября 2009

В вашем втором ответе Content-Disposition в поле отсутствует ключевое слово inline, это может быть причиной?

Также, как Murali предложил вам установить Content-Length на фактическое значение.

0 голосов
/ 11 ноября 2009

Это предположение, но, поскольку вы возвращаете заархивированный .xpi, а не .xpi, я полагаю, вы должны использовать application / zip? если .xpi по своей природе не заархивирован, то действительно .zpi сам по себе не является допустимым. Как насчет отправки его без сжатия?

...