Как отправить изображение в ответ сервлета на ajax? - PullRequest
1 голос
/ 22 июня 2011

Я загружаю файл изображения из базы данных в jsp. Я выбрал изображение с помощью SQL, как показано ниже

select (logo_img_one) from accounts_logo where logo_usrm_id=1

Я читаю изображение, используя двоичный поток как

InputStream readImg = rs1.getBinaryStream(1);

и сделал тип контента как "image / jpeg" как

response.setContentType("image/jpg");

Теперь я хочу знать, как использовать getoutputstream of response для отправки изображения в ajax и как войти в ajax. Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Это не сработает.JavaScript не может сохранить извлеченные байты локально или что-то и сказать браузеру, чтобы отобразить его.Лучшее, что вы можете сделать, это передать URL-адрес изображения обратно в виде строки и позволить JavaScript установить его в качестве атрибута src элемента HTML <img>.

Например, в сервлете

response.setContentType("text/plain");
response.getWriter().write(imageUrl); // e.g. "images/some.png"

и в JS

var imageUrl = xhr.responseText;
var img = document.createElement("img");
img.src = imageUrl;
document.getElementById("someDivId").appendChild(img);

Таким образом

<div id="someDivId"></div>

будет динамически заканчиваться чем-то вроде

<div id="someDivId><img src="images/some.png" /></div>

Вы можете создать сервлет изображениякоторый передает изображение из БД в выходной поток ответа и отображает сервлет на /images/*.Вы можете найти пример здесь .

0 голосов
/ 26 марта 2013

Это может работать ... Идея состоит в том, чтобы установить для атрибута src изображения что-то вроде:

src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYlJREFUeNrMVD1rwlAUPfkwBBxFKQQlDhmjqzj4F9w7FfwThZaW9n8UnDrrn1BEXNTBRQQhEE1ERRR0Sd990A7VaKJJ6YHzEu4N99z3zrsRGo2GAuCF8YFRQzSwGOuM7zJb3hgfES2o0SdGSWRLDfGhRgLpGAXS4q0VCoUCBEHwzd8skM/nUSqVoCjKybz8O1CtVn2LeZ4H27YxnU6xXC6x3+95PJPJoFKpoN1uY7vdnhfww3w+x3A4xGaz4d3quo5sNvuTTyaTXKTb7cJ13csCzWbzKKaqKj/zXC4HSZKO8iRcLpcxGAwwmUzC7UDTNBSLRSQSiVAeyUGNpM4v4XA4oNfr8eMMLJBKpWCaJn9fLBawLAur1Qq73Y6b/H0pyNyrTDYMA7PZDKPRCOv1+uQ3ZCqZe9UcOI6DTqfjW5zMbLVa3Bu6RaE9GI/HZ/P9fp8/qfipYROj+ukEnuQgEx0GImKGHGSC//UO/kTAibG+QwIfMQrUyeRXusaM94x3ERW2GT8Zn78EGACRmoKUJhB1TQAAAABJRU5ErkJggg=="

Строка base64 может быть запрошена через ajax, вызвав ваш сервлет и закодировав входной потокизвлечено из БД.

0 голосов
/ 23 июня 2011

вы можете использовать поток вывода следующим образом после установки contentType

   Printwritter out =response.getWritter();
   out.println(imageObject);
   out.flush
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...