我正在尝试在浏览器中显示来自服务器的图像。我正在关注此链接 http://balusc.blogspot.in/2007/04/imageservlet.html。我必须说这是很好的书面和记录。我试过了,一切正常。
当我使用 ajax 显示此图像时,问题就出现了。整个图像似乎分解成 div 内的一些代码。
我知道代码中使用的输出流直接写入页面。但是真的不可能处理该输出流以某种方式在 jsp 的图像标记中显示图像而无需创建不同的 servlet。
感谢您阅读
我正在尝试在浏览器中显示来自服务器的图像。我正在关注此链接 http://balusc.blogspot.in/2007/04/imageservlet.html。我必须说这是很好的书面和记录。我试过了,一切正常。
当我使用 ajax 显示此图像时,问题就出现了。整个图像似乎分解成 div 内的一些代码。
我知道代码中使用的输出流直接写入页面。但是真的不可能处理该输出流以某种方式在 jsp 的图像标记中显示图像而无需创建不同的 servlet。
感谢您阅读
您不需要通过 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 类型而改变。
阅读链接的 Wikipedia 页面以充分了解此处的权衡取舍。
只需添加我如何实现它的解决方案。我通过 ajax 引用了一个新页面(来自我提交表单的页面),在新页面中我使用了一个图像,并通过它的 src 属性我调用了 servlet 方法,该方法通过其输出流写入图像。
这样,servlet 将我的图像写入我可以放置在任何地方的新文件。