使用Oauth2、angular和yii2REST从受保护的文件夹中提供图像



我的项目必须处理非常敏感的图像,未经授权的用户不应该访问这些图像,保存在受保护的位置。对于常规的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);
});

最新更新