如何将servlet响应中的图像发送到ajax?

时间:2011-06-22 15:40:51

标签: javascript ajax servlets

我正在将图像文件从数据库上传到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将图像发送到ajax以及如何进入ajax。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

这不起作用。 JavaScript无法在本地或其他地方保存检索到的字节,并告诉浏览器显示它。最好的办法是将URL作为字符串传回图像,然后让JavaScript将其设置为HTML src元素的<img>属性。

E.g。在servlet中

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>

您可以创建一个图像servlet,将图像从数据库流式传输到响应的输出流,并在/images/*上映射servlet。您可以找到示例here

答案 1 :(得分:0)

设置contentType

后,您可以按如下方式使用输出流
   Printwritter out =response.getWritter();
   out.println(imageObject);
   out.flush

答案 2 :(得分:0)

它可能有用......想法是将图像的src属性设置为:

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

可以通过调用servlet通过ajax查询base64字符串,并对从DB中检索的输入流进行编码。