我有一个将用户文件上传到S3的应用程序.目前,文件夹和文件的ACL设置为私有.
我创建了一个存储以下信息的db表(称为docs):
id user_id file_name (original file as specified by the user) hash_name (random hash used to save the file on amazon)
因此,当用户想要下载文件时,我首先在db表中检查他们是否有权访问文件.我宁愿不先将文件下载到我的服务器然后发送给用户 – 我希望他们能够直接从亚马逊获取文件.
是否可以依赖非常长的hashname(任何人都无法随机猜出文件名)?在这种情况下,我可以将每个文件的ACL设置为public-read.
请记住,一旦链接在那里,没有什么可以阻止用户与他人共享该链接.然后,没有什么能阻止用户将文件保存到别处并共享指向文件副本的链接.
最好的方法取决于您的具体需求.
选项1 – 限时下载URL
如果适用于您的方案,您还可以创建到S3内容的过期(有时间限制)自定义链接.这将允许用户在有限的时间内下载内容,之后他们将不得不获得新的链接.
http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html
选项2 – 混淆的URL
如果您重视通过Web服务器运行文件,而不是有意识地共享URL(无论多么模糊),那么请使用难以猜测的链接名称.这将允许链接“永远”保持有效,这意味着链接可以“永久”共享.
选项3 – 通过您的服务器下载