【问题标题】:How I do get an image blob from JSP to JavaScript?如何从 JSP 获取图像 blob 到 JavaScript?
【发布时间】:2011-08-18 23:30:49
【问题描述】:

我从表中检索了一个 blob 以及其他一些数据,例如 nameimage

name = varchar, image = blob

我将它设置为过滤器中的一个对象并将其传递给 JSP 文件:

request.setAttribute("info", object);

在 JSP 文件中我得到了该数据:

request.getAttribute("info");

现在我有了来自该对象的数据,我该如何将该信息传递给我的 JS 文件并将图像渲染为 JS 文件的源?

我正在尝试:

    <div>
         <script type="text/javascript" src="jsFile.js></script>
    </div>

var name = <%=info.name%>;
var image = <%=info.image%>

它似乎不起作用。这样做的正确方法是什么?

【问题讨论】:

  • 您是传递实际图像(即二进制数据)还是仅传递图像文件名(磁盘上图像的路径)?
  • 好吧,它是表中的一个 blob,所以我猜它是二进制数据.. 没有目录,只是图像数据...

标签: java javascript database image jsp


【解决方案1】:

这行不通。将 blob 留在服务器端。客户端的 JavaScript 无法对二进制数据做任何有意义的事情。它所需要的只是图像的 URL,以便它可以在 HTML &lt;img&gt; 元素的 src 属性中引用它,这样网络浏览器就可以依次完成下载和显示图像的工作。最好在 URL 中包含图像标识符。图像的名称是唯一的,对吗?在 URL 中使用它。

第一步是让 JS 使用正确的 src 属性创建一个 HTML &lt;img&gt; 元素,该属性指向返回图像的 URL。假设您正在准备如下数据

String name = "foo.png";
String imageURL = "imageservlet/" + name;
request.setAttribute("imageURL", imageURL);

并在 JSP(!) 中打印它,就像它是 JS 变量一样,如下所示

<script>
    var imageURL = '${imageURL}';
    // ...
</script>

(请注意,这些单引号是强制要求将它们表示为 JS 字符串变量的)

这样它们最终会出现在生成的 HTML 源代码中,如下所示(在浏览器中右键单击页面并执行 查看源代码 以验证它)

<script>
    var imageURL = 'imageservlet/foo.png';
    // ...
</script>

然后您可以按如下方式创建图像

var img = document.createElement("img"); // or getElementById("someId")?
img.src = imageURL;
// ... add to document? 

(请注意,这只是一个示例,我完全不知道功能要求是什么以及您想对这个图像元素做什么,甚至可能根本不需要 JS 代码具体功能要求)

这样它在 HTML 中的结尾是这样的:

<img src="imageservlet/foo.png" />

现在,第二步是创建一个servlet,它侦听/imageservlet/* 的URL 模式,通过传入的标识符从数据库中检索图像为InputStream,并将其写入@987654335 @ 沿着一组正确的响应标头的响应。长话短说,我之前已经发布了几个关于如何做到这一点的答案,它们包含启动代码 sn-ps:

【讨论】:

  • 我想只插入图像的链接而不是将整个图像作为 blob 插入,但这就是我的导师想要的方式......我正在考虑进行 ajax 调用,但还没有真正弄清楚整个事情还没有结束......
  • 对不起,要么你的导师是个十足的白痴,要么你误解了他。您可以对其进行 base64 编码,然后使用数据 URI 方案,但这不适用于所有网络浏览器,也绝对不是提供图像的正常方式。
  • 我正在查看他们似乎以类似方式执行此操作的公司代码。将图像作为 blob 插入表中,然后在需要时检索它。我只是还没弄清楚它是如何完成的
  • 我认为您应该请您的导师更详细地向您解释这一点,可能会让您通过一些他/她的想法的快速示例(以及您谈论的现有代码的快速运行)关于)。或者让更有经验的人跟你一起做。如果他/她不能做到这一点,他/她就不是导师。他/她是一个“老板”(而且是一个非常糟糕的老板)。
【解决方案2】:

如果您在 jsFile.js 之前的脚本块中设置变量,则可以从脚本访问您的数据。即:

<div>
    <script type="text/javascript">
        var name = <%=info.name%>;
        var image = <%=info.image%>;
    </script>
    <script type="text/javascript" src="jsFile.js></script>
</div>

我不确定您打算如何处理二进制 (BLOB) 图像数据?通常这将被写入服务器上的图像文件并通过img 标签引用:

<img src="/path/to/myimage.jpg" />

我建议不要将您的 blob 数据传递给 JSP 文件,而是让服务器(您的 servlet)将一个 URL 传递给 JSP,浏览器可以使用该 URL 通过 img 标记获取图像。您可以将 blob 数据写入 URL,也可以编写一个 servlet,在传递 id 时写出Content-type: image/jpeg(或类似的)数据,即:

<img src="http://www.yourserver.com/GetImage?imageId=xxx" />

【讨论】:

  • 即使成功传递,javascript 甚至可以从该 blob 中渲染图像吗?!我所有的变量等都在 jsp 文件中,那么 js 文件就是实际生成 html 动画等的文件...非常烦人=/
  • 不太可能。这就是为什么您需要将图像数据留在服务器端并将IMG src url 传递给 JSP。
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2018-11-07
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多