我正在寻找使用S3作为邮件系统的数据存储服务。
这个想法是允许用户上传文件作为电子邮件的附件,然后通过链接到S3上托pipe的文件从Web服务下载。
我面临的问题是:
当用户select他们的文件名,会有碰撞,所以S3上的文件必须有唯一生成的文件名,或存储在不同的文件夹中,用户是否仍然可以使用一些API或configuration下载文件的原始文件名?
(例如:用户上传文件dog.gif,存储在存储桶中为A3f23_dog.gif,下载链接返回文件为dog.gif,可能使用HTTP标头)
包含在单个存储桶(位于根目录下)的文件/文件夹的数量是否会对性能造成影响? 或者我需要做一些文件分配到文件夹等
我可以使用URL公开提供这些文件,但仍然不允许枚举文件桶中的文件吗? (即文件列表)
非常感谢,我希望这是有道理的。
我最近devise了一个类似的系统来存储报告 – 这就是我们发现的很好的工作:
<user-id>/<year>/<month>/<day>/<message-id>/<user-defined-filename> 。 (1)的要点是确保用户之间没有冲突 – 不pipe你喜欢什么,你都可以重构层次结构,但关键是要把唯一标识符作为关键结构的一部分(在这种情况下, user-id和message-id),同时保留原文件名作为结构的最后部分; 该结构的最后部分是大多数浏览器用作下载文件的名称。
请注意,我将date作为结构的一部分,如果要有很多对象,则需要将它们分隔到S3密钥空间中的虚拟“文件夹”中,因此您不必每次您需要手动查找文件时,请永远等待。
点(2)仅提供对文件的接收者的访问权限。 只有存储桶的所有者(您)才能列出文件(除非您明确授予不同的权限),但是具有文件链接的任何人都可以访问它。
如果您想添加对链接的更多控制,请创build指向用户通过应用程序的链接,然后如果您的应用程序决定用户实际上已获得授权,请创build一个预先签名的url并将其提供给用户。 (这样你可以发布有时间限制的预先签名的URL,所以你不要只通过链接提供完整的持久访问。)