如何在 Angular JS 中显示作为字节数组接收的图像

How to display Image received as byte array in Angular JS

我有一个服务器端应用程序可以 return 图片。这些是响应 headers:

Content-Disposition: attachment; filename=8822a009-944e-43f4-999b-d297198d302a;1.0_low-res
Content-Length: 502343
Content-Type: image/png
Date: Mon, 03 Aug 2015 19:13:39 GMT
Server: Apache-Coyote/1.1

在angular中,我需要显示图像。获取图像时,我使用 angularJS $http 调用服务器并将结果放入范围,但我从未达到 $http 的成功功能。正常执行来自邮递员 returns 图像的调用。我很好奇如何让 Angular 显示图像。

我是这样显示图片的:

<img ng-src={{image}} />

这是从服务器获取图像的调用:

$http.get(url, {responseType: "arraybuffer"})
    .success(function(data) {
        $scope.image= data;
    }
)
  • 我认为你应该使用 then 回调,在 angular documentation 他们说 success 回调已经 已弃用。
  • 您的 img 在 data 响应中 属性.

经过这些考虑,你可以尝试这样的事情。

$http.get(url, {responseType: "arraybuffer"} ).then(function(response) { 
$scope.image= response.data; });

我同意 Bellu 的回应,您应该对从 $http.get 返回的承诺使用 .then 函数,而不是 .success 函数。但是,我认为您的 ng-src 引用仍然存在问题,因为您没有为它提供 URL,而是对字节数组的引用。

要将您的 ng-src 引用绑定到客户端内存中的字节数组,您的绑定应采用以下形式:

<img ng-src="data:image/JPEG;base64,{{image}}">

编辑

由于我从未明确提及,上面的 ng-src 绑定假设您的图像数据是 base64 格式。 HarrisonA 在下面提供了一个方法来转换数组,如果它不是 base64 格式的话。

只是想添加到 jdmcnair 回答和 Loshmeey 的评论:

下面是我用来将数组缓冲区转换为 base 64 字符串的函数的 link。

ArrayBuffer to base64 encoded string

函数:

function _arrayBufferToBase64( buffer ) {
  var binary = '';
  var bytes = new Uint8Array( buffer );
  var len = bytes.byteLength;
  for (var i = 0; i < len; i++) {
    binary += String.fromCharCode( bytes[ i ] );
  }
  return window.btoa( binary );
}

我在我的 angular 控制器中使用了这个函数,然后将结果(使用 $scope 变量)传递到我的 html 文件中的 img 元素。