无法使用MEAN堆栈显示图像
我正在使用MEAN堆栈,并试图显示存储在我的Mongo数据库中的图像。 我相信图像被正确存储并正确传递到浏览器,因为当我使用Web控制台,并看看我的post响应身体显示图像的响应。
我有一个表,当一个单击行时,它会打电话给我的控制器:
$scope.detailRequest = function(index){ $scope.selectedRow = index; $scope.selected = this.contact; $http.post('/DetailRequest', $scope.selected).success(function(response){ $scope.detailResponse = response; }); };
在节点我查询Mongo并返回图像:
router.post('/DetailRequest', function(request, response) { reports .findOne({_id : request.body._id}) .select('img') .exec(function (err, research) { response.contentType(research.img.contentType); response.send(research); }); });
我正在使用ng-src
进行图像显示。 正如我在页面顶部提到的,我可以在Web控制台的Response Body中正确地看到图像。 因此,我有信心将图像传回浏览器。
<img ng-src="{{detailResponse}}">
图像不会显示
你的电线在这里交叉了一点。
ng-src会将Img src属性设置为一个URL。 然后浏览器将加载一个GET请求的src URL。
<img ng-src="{{someUrlRequestedWithGet}}">
所以你的快车路线应该是一个GET :
router.get('/DetailRequest/:id', function(request, response) { reports .findOne({_id : request.params._id}) .select('img') .exec( function (err, research) { response.contentType(research.img.contentType); response.send(research); });
注意:不要把id放在正文中,而是放在URL中。
提示:无论粘贴到浏览器栏中的ng-src中的URL是什么都应该显示。
还有一种方法可以从POST获取图像数据(尽pipe这不是POST的最佳使用方式 )。 但是你将不得不做更多的战术,并使用数据 – uri
所以,在Angular的这些线上的东西应该工作:JavaScript:
$scope.imageData = 'data:image/jpeg;base64' + Base64LongLongString;
模板:
<img ng-src="imageData" />
让我们看看为什么它应该工作。
<img src="">
需要一个uri,所以如果我们在这个属性中inputuri,那么在你的情况下不起作用。 与uri ng-src
会有同样的问题。
embedded二进制数据的图像具有以下src属性:
<img src="data:image/jpeg;base64,/9j/Base64LongLongString">
更多关于这种表示在http://ben.lobaugh.net/blog/33713/using-binary-image-data-to-display-an-image-in-html