AWS Cloudfront Link不通过Web提供服务

时间:2018-05-26 07:36:23

标签: url amazon-s3

我正在使用AWS S3和Cloudfront在网页上存储图像和渲染图像。我已设法使用Cloudfront生成签名URL以呈现S3对象。

问题是,我尝试在href =''tagger的标签中附加该签名的URL。我希望,当用户点击链接时,它会通过网络将他们引导到图像。而是在用户单击链接时下载文件。

如何生成照片密钥

var photoKey = $ctrl.clientDetail["_id"] + '/' + fileName;

我为每个用户创建了一个子目录,并将该文件存储在相应的子目录中。

我在AngularJS中的上传功能

s3.upload({
                        Key: photoKey,
                        Body: file,
                        ACL: 'public-read',
                        Metadata: {
                            'id': $ctrl.clientDetail["_id"],
                            'phone': $ctrl.phone
                        }
                    }, function(err, data){
                        if (err) {
                            $scope.uploadedFail = true;
                            console.log(err)
                            genericServices.setErrorInfo($scope.configErrorAddDocAlert, addDoc_reason);
                        }
                        else {
                            $scope.uploadedSuccess = true;
                            genericServices.setSuccessInfo($scope.configSuccessAddDocAlert, addDoc_success);
                        }
                    }
                );

我发现有趣的是,当我在AWS S3控制台的子目录中手动上传文件时,生成的URL能够通过Web提供文件。

如何制作,以便存储桶中的对象不是可下载的文件,而是链接?

1 个答案:

答案 0 :(得分:1)

对于那些遇到同样问题的人,这是解决方案。

上传时,请指定内容类型。

修改S3上传流程

s3.upload({
                        Key: photoKey,
                        Body: file,
                        ContentType: file.type,
                        Metadata: {
                            'id': $ctrl.clientDetail["_id"],
                            'phone': $ctrl.phone
                        }
                    }, function(err, data){
                        if (err) {
                            $scope.uploadedFail = true;
                            console.log(err)
                            genericServices.setErrorInfo($scope.configErrorAddDocAlert, addDoc_reason);
                        }
                        else {
                            $scope.uploadedSuccess = true;
                            genericServices.setSuccessInfo($scope.configSuccessAddDocAlert, addDoc_success);
                        }
                    }
                );

最初,类型是application / octet-stream,所以它只能下载。

谢谢你@ michael-sqlbot的评论