一种选择是让您的应用程序管理 s3 对象的“读取策略”=人们可以下载的文件。您可以设置策略的过期时间。
在我的流星应用程序中,我正在使用这个库:
https://github.com/arbitrarytech/s3policy
在服务器上:
Meteor.methods({
get_s3_read_policy: function(_key,_filename) {
var SECONDS_BEFORE_TIMEOUT = 1000;
var s3 = new s3Policies( CONFIG.aws_access_key , CONFIG.aws_secret_access_key );
var signedURL = s3.readPolicy( _key, 'your_bucket_name' , SECONDS_BEFORE_TIMEOUT , _filename);
return signedURL;
}
});
在您的情况下,您可能只需要签名的 URL。在我客户端上的应用程序中,这就是我开始下载的方式。
Meteor.call('get_s3_read_policy', key, filename , function(err,_signedURL) {
if (err){
console.log("Error retrieving the signed url for download ", err);
}else{
window.open(_signedURL,"_self");
}
});
所以,我认为可以直接通过电子邮件将此签名 URL 发送给用户,然后如果它过期,用户将看到错误并且无法访问该资源。我读到在 s3 中甚至有一种方法可以向用户展示一个不错的错误页面custom 404 page for missing object in s3 temporary signed URL,但我还没有尝试过。