我正在使用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提供文件。
如何制作,以便存储桶中的对象不是可下载的文件,而是链接?
答案 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的评论