Jef*_*rto 5 javascript ruby amazon-s3 amazon-web-services
指的是: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}?
还有其他解决方案吗?
首先,您提供的链接是SDK for Ruby v1,它已经非常过时了。我会推荐v3 文档。正如您将看到的,这些文档建议您不需要自己构建 PresignedPost,而应该首先尝试Bucket#presigned_post和Object#presigned_post。
当您创建预签名 URL 的请求时,只需使用您所需的密钥即可。例如,如果用户上传bar/foo.png,您的 Ruby 代码将为名为 的新对象创建一个预签名 URL bar/1234.png。我建议1234使用 uuid、时间戳或等效项来确保对象名称是唯一的并且不会相互覆盖。
例如:
# Assuming you already have an S3 client instance configured
s3 = Aws::S3::Resource.new(region: "us-east-1")
s3_bucket_name = 'foo'
s3_bucket = s3.bucket(s3_bucket_name)
file_name = 'bar/foo.png'
new_key = create_new_key(file_name)
presigned_post = s3_bucket.presigned_post(
key: new_key
)
Run Code Online (Sandbox Code Playgroud)
create_new_key()您可以将操作原始文件路径的字符串所需的逻辑放入所需的键中。我建议使用 Ruby 的File内置函数来最有效地完成此任务。
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |