指的是:http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/PresignedPost.html
当用户从浏览器直接上传到S3时。您可以指定用户必须将资源发布到的URL。
也可以使用${filename}使路径基于所讨论对象的文件名。
但是,我们只需要文件类型而不是全名,因为我们需要资源上的可预测位置。
例如,在用户上传名为mypic.png的文件后,我们希望URL为/folder/1234.png而不是/folder/mypic. png。
需要明确的是,如果我们指定/folder/1234,那么png扩展名将丢失。文件类型可以是任何图像。
由于我们不知道文件扩展名,因此似乎只有通过${filename}才能获得它
是否有其他类型的模板类型变量,如${filetype}?
有其他解决办法吗?
1条答案
按热度按时间nkoocmlb1#
首先,您提供的链接是Ruby v1的SDK,它非常过时。我会推荐v3 docs代替。正如您将看到的,这些文档建议您不需要自己构建PresignedPost,而应该首先尝试Bucket#presigned_post和Object#presigned_post。
当您创建预签名URL的请求时,只需使用所需的密钥即可。例如,如果用户上传
bar/foo.png
,Ruby代码将为名为bar/1234.png
的新对象创建一个预签名的URL。我建议使用uuid、timestamp或类似的东西来代替1234
,以确保对象名是唯一的,不会互相覆盖。例如:
在
create_new_key()
中,您可以将操作原始文件路径字符串所需的逻辑放置到所需的键。我建议使用Ruby的File
内置来最有效地完成这一任务。