在Javascript/JQuery中从REST Web服务获取图像

在Javascript/JQuery中从REST Web服务获取图像,javascript,jquery,Javascript,Jquery,我试图通过从REST Web服务获取二进制数据来动态填充图像标记src。我的链接类似于myhost:port/docId/imageId/file,它返回的内容类型为“application/octetstream”,数据类型为二进制。我的方法是获取这个二进制数据,base64对其进行编码(使用jquery.base64.js),然后将base64编码的数据放入src中。一些代码部分如下所示 $.ajax({ url: " myhost:port/do

我试图通过从REST Web服务获取二进制数据来动态填充图像标记src。我的链接类似于myhost:port/docId/imageId/file,它返回的内容类型为“application/octetstream”,数据类型为二进制。我的方法是获取这个二进制数据,base64对其进行编码(使用jquery.base64.js),然后将base64编码的数据放入src中。一些代码部分如下所示

            $.ajax({
          url: " myhost:port/docId/imageId/file ",
          datatype: "binary",
          beforeSend: function (xhr) {
              xhr.overrideMimeType("text/plain; charset=x-user-defined");
          },
          success: function(image){
              var imgBase64 = $.base64.encode(image);
              return  imgBase64  ;
          },
          error: function(xhr, text_status){
              console.log("An error again " + text_status);
          }
    });
我采用的另一种简单的AJAX方法是:

  req.open('GET', " myhost:port/docId/imageId/file" , false);
  req.overrideMimeType('text\/plain; charset=x-user-defined');
  if (req.status != 200){
          console.log("Status code not 200");
          return '';
      }
  return req.responseText;
我正在重写MIME类型,因为如果我不这样做,尽管GET显示状态为200OK,但fetch会抛出一些错误。 现在我正在base64编码“req.responseText”[var imgBase64=$.base64.encode(req.responseText);]并将其放入图像的src中

这就是我如何将base64数据放入img的方式: var imageSource=“数据:图像/png;base64,”+imgBase64; $('#imageId').attr('src',imageSource)
然而,在这两种情况下编码时 jquery base64向我抛出异常“无效字符错误:DOM异常5”。即使我在src中放置base64数据时通过抑制此异常对其进行强制编码,它也会在Firebug中显示损坏的数据。我的感觉是,当我重写MIME类型时,二进制数据的编码在某种程度上被篡改了,因此在base64编码过程中,它带来了一些问题


有人能告诉我哪里出了问题,或者演示如何从REST api获取图像(jpeg/png/gif/有时是tif)文件吗?

也许您不需要对数据进行编码。尝试将准确的base64字符串转储到图像标记中,如

<img src="data:image/png;base64,@@BASE64STRING@@"/>


是必需的数据uri吗?难道你不能只执行
$(“#imageId”).attr('src','myhost:port/docId/imageId/file')我需要向服务器发送一些安全头。加上我的服务器返回二进制数据。图像src可以直接显示二进制数据吗?我尝试了base64插件,但我无法让它工作,你不能在服务器上对数据进行base64编码然后发送它吗。