使用输出流从服务器显示图像

时间:2013-01-21 16:34:53

标签: java ajax jsp servlets

我正在尝试在浏览器中显示来自服务器的图像。我正在关注此链接 http://balusc.blogspot.in/2007/04/imageservlet.html。我必须说这是写得很好并且有记录。我试过这个,一切都很好。

当我使用ajax显示这个图像时,问题出在那里。整个图像似乎分成div中的一些代码。

据我所知,代码中使用的输出流直接写入页面。但是,实际上不可能处理输出流以某种方式在jsp的image标签中显示图像而不必创建不同的servlet。

感谢您阅读

2 个答案:

答案 0 :(得分:5)

您无需通过AJAX请求图像数据,然后自行操作,以便显示它。只需使用<img>代码!

如果/my_url是您图片的位置,那么

<img src="/my-url" alt="Appropriate description"/>

会这样做。注意:/my-url不一定是实际图像。它可以是任何返回具有相应MIME类型集的图像数据的资源(包括servlet)。

如果你想动态创建标签,可以使用自己喜欢的库,或者使用本机JS:

var oImg=document.createElement("img");
oImg.setAttribute('src', '/my-url');
oImg.setAttribute('alt', 'Appropriate description');
oImg.setAttribute('height', imgHeight);
oImg.setAttribute('width', imgWidth);
document.body.appendChild(oImg);

修改

如果你想做这个服务器端(如果是这样,这真的是AJAX吗?),那么你可能想看看data uri scheme

使用此方案,您可以直接将数据传输到图像标记,而无需为其提供HTTP资源。要使用此功能,请将输出流转换为base64并使用以下命令:

<img src="data:image/png;base64,converted-data-stream-goes-here..." alt="Who needs HTTP?"/>

image/png会根据源数据的MIME类型而改变。

阅读链接的维基百科页面,以完全理解这里的权衡。

答案 1 :(得分:0)

只是添加我如何实现它的解决方案。 我通过ajax引用了一个新页面(从我提交表单的页面),在新页面中,我使用了一个图像,通过它的src属性,我调用了servlet方法,该方法通过其输出流写入图像。

这样servlet就将我的图像写入新文件,我可以将它放在任何地方。