2010-11-23 5 views
0

Я написал сервлет, который фактически пишет байты изображения в ответ. Я могу загрузить изображение, отправив форму с действием или отправьте сообщение в сервлет. Но как я могу запросить этот сервлет, не выходя из страницы?Как загрузить изображение, не выходя из страницы?

Я пробовал jQuery.get("http://localhost:8080/mydownloadservlet"). Запрос поступает в сервлет, но изображение не загружается. То же самое работает с формой submit.

Спасибо, Amit Patel

ответ

3

Следующее работает.

Создано скрытое iframe.

<iframe src="" id="hiddenFrm" style="display:none;" frameborder="0"></iframe> 

и с помощью jquery скачал изображение, установив src скрытого фрейма следующим образом.

function download(url){ 
    jQuery("#hiddenFrm").attr("src",url); 
} 
0

1) Вам необходимо правильно установить заголовки HTTP:

Content-Disposition: attachment; filename=mypic.jpg 

2) Вы должны перейти на эту страницу, а не делать jQuery.get, но

<a href="http://localhost:8080/mydownloadservlet">Download pic</a> 

или в javascript

window.location = 'http://localhost:8080/mydownloadservlet'; 

Если все идет по плану, вы действительно должны покинуть страницу.

3

Добавить заголовок Content-Disposition: attachment в ответ сервлета. Таким образом, клиент вынужден вывести диалог Save As.

response.setHeader("Content-Disposition: attachment; filename=image.gif"); 

ли это до того написания байт в ответ. Для этого вам не нужен JavaScript на стороне клиента. Просто ссылка или форма, указывающая на сервлет. Клиент не покинет страницу, потому что для размещения контента не установлено значение inline.

Вы, однако по-прежнему зависит от конфигурации по умолчанию клиента, есть ли действие по умолчанию, связанное с Content-Type насадки, которая будет выполняться сразу вместо Сохранить как. Например, в Firefox это настраивается Инструменты> Параметры> Приложения. Вы не можете контролировать это со стороны сервера, но не стоит беспокоиться об этом. Клиент решил, что так оно и есть.

Смежные вопросы