用于上传文件的 AWS S3 generate_presigned_url 与 generate_presigned_post

迪内什·库马尔

我正在使用预签名的 URL 将文件上传和下载到 S3 存储桶。我遇到了这两种方法generate_presigned_url('put_object')generate_presigned_post.

这两种方法有什么区别?

# upload a file to a bucket with generate_presigned_url with put object
s3_client.generate_presigned_url('put_object', Params= {'Bucket': "BUCKET_NAME",
                                                        "Key":"OBJECT_KEY"},
                                                         ExpiresIn=3600)
  

# upload a file to a bucket using presigned post
s3_client.generate_presigned_post(Bucket="BUCKET_NAME", Key="OBJECT_PATH",
                                  ExpiresIn=3600)

有人可以解释两者之间的区别吗?

如果我们有generate_presigned_post为什么首先有一种上传generate_presigned_url方法put_object

注意:我知道这generate_presigned_post是推荐的文件上传方法,我也使用过。但是,没有关于这些方法之间区别的明确文档。

迪内什·库马尔

这是@jellycsc 评论的扩展版本。我也向 aws 支持发布了相同的查询。我从他们那里得到了以下答案。

更详细的解释在这里给出

在这里发布,因为它可能对某人有用。

这两种方法有什么区别?

generate_presigned_post()由于 POST Policy功能,功能更强大POST 策略只是您在创建预签名 POST 时设置的条件。使用它,您可以允许某些 MIME 类型和文件扩展名,允许使用给定前缀上传多个文件,限制文件大小等等,这是在generate_presigned_url()

请注意,这两种方法可用于实现相同的目标,即为用户提供可控制的方式将文件直接上传到 S3 存储桶。两者的过程也相同,因为后端需要在验证用户被授权后对请求进行签名,然后浏览器将文件直接发送到 S3。

区别:

网址结构:

PUT URL 对 URL 本身中的所有内容进行编码,因为没有其他内容返回给客户端。这意味着可以自定义的变量更少。

POST URL 对不同类型的信息使用多个字段。签名算法返回一个字段列表以及 URL 本身,客户端在访问预签名 URL 时也必须将这些字段发送到 S3。

虽然 PUT URL 提供了一个没有任何其他必需部分的上传文件的目的地,但 POST URL 是为可以发送多个字段的表单制作的。然而,它们的使用不限于形式。

内容类型

对于 PUT URL,必须针对特定内容类型进行签名。这意味着您要么在后端硬编码内容类型,例如,如果您希望允许用户上传 XML 文档,则为 application/xml,或者客户端必须发送所需的内容类型作为签名请求的一部分。

对于 POST URL,策略支持前缀约束以及精确匹配。

内容长度:

对于 PUT URL,您无法控制上传文件的大小。

对于 POST URL,您可以在策略中设置允许的范围。

python中的示例预签名帖子:

response = s3_client.generate_presigned_post(Bucket="BUCKET_NAME",
                                                     Key="S3KEY",
                                                     Fields={"Content-Type": "image/jpg"},
                                                     Conditions=["starts-with", "$Content-Type", "image/"],
                                                     ExpiresIn=3600)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从“ ibm_boto3”调用“ generate_presigned_post”?

BOTO3-为put_object返回的generate_presigned_url返回我们计算出的请求签名与您提供的签名不匹配。

测试AWS S3 Presigned Url返回403 Forbidden(Nodejs)

使用S3 Presigned-URL上传文件,然后该文件将具有公共读取权限

如何使用postdata preSigned Url调用Amazon S3存储桶以使用Karate上传文件

AWS Presigned Url生成

如何构建Amazon S3 Presigned PostPolicy以在Java SDK 2.0中上传文件?

通过 s3 presigned_url 使用 axios 下载 json 文件

使用presigned_url触发S3文件的下载

使用 S3 presigned-url 將文件上傳到設備場

如何在Ruby中将预签名的POST文件上传到AWS S3?

使用POST请求在AWS S3上基于浏览器的文件上传

节点JS AWS S3文件上传。如何获得公共URL响应

AWS PHP SDK:限制预签名URL中的S3文件上传大小

使用Retrofit2将文件上传到AWS S3预签名URL

将文件上传到AWS S3预签名URL Retrofit2 Android

AWS的Java SDK 2.0创建一个S3对象presigned网址

上传后从 AWS S3 获取上传的文件

使用 cakephp 3 上传 AWS S3 文件

使用预签名 URL 上传后,AWS S3 上的文件在文件中包含额外信息

使用Java将AWS文件上传到S3

Coldfusion:尝试在 AWS S3 中上传文件

文件上传到AWS S3 Laravel 5.1

玩!上传文件并保存到AWS S3

AWS S3上传的文件未显示

最近上传的 AWS S3 文件未更新

重试失败的文件上传到AWS S3

通过AWS Api Gateway上传S3表单文件

AWS S3最大文件和上传大小