我的项目必须处理非常敏感的图像,未经授权的用户不应该访问这些图像,保存在受保护的位置。对于常规的http请求,我以前也这样做过,但现在我在前端使用了angular应用程序Oauth2客户端,在服务器端使用了Yii2支持的API。我想知道这样做的最佳实践是什么,我应该创建新的yii\web\Controller来提供图像(创建和删除图像仍在rest控制器中),这会给我的授权带来一些困难,而且看起来有点棘手。或者我应该在yii REST控制器中使用原始输出格式,并将图像渲染为响应吗?如果可行的话,我更喜欢第二种方法,因为我是angular.js的新手,不知道如何做到这一点,理想情况下,我想渲染像一样简单的图像
<img src="example/image/123" />
我想排除base64编码,因为这将在
第二种方法可以通过URL.createObjectURL
实现。在PHP方面,您只需要使用类似readfile()
的东西。在角度方面,尝试类似的东西
$http.get('example/image/123', {
responseType: 'blob',
headers: {
Authorization: 'Bearer super-secret-token'
},
transformResponse: function(data) {
return ($window.URL || $window.webkitURL).createObjectURL(data);
}
}).then(function(response) {
$scope.imageUri = response.data;
});
以及在您的模板中
<img ng-src="{{imageUri}}">
当你不再需要图像时,比如当你的当前范围被破坏时,你可能也应该发射URL.revokeObjectURL
,例如
$scope.$on('$destroy', function() {
($window.URL || $window.webkitURL).revokeObjectURL($scope.imageUri);
});