在 AWS S3 中上传文件时指定最大文件大小
Specify Maximum File Size while uploading a file in AWS S3
我正在通过 AWS Security Token Service (AWS STS) 创建临时凭证。
并使用这些凭据将文件从 S3 JAVA SDK 上传到 S3。
我需要一些方法来限制文件上传的大小。
我试图在创建用户时添加策略(s3:content-长度范围),但这似乎不起作用。
有没有其他方法可以指定用户可以上传的最大文件大小??
我相信在上传之前没有办法限制对象的大小,对此做出反应会非常困难。解决方法是通过 Lambda 函数或 SNS 主题创建一个 S3 event notification 来触发您的代码。例如,这可以验证或删除对象并通知用户。
另一种方法是生成 pre-signed URL 而不是临时凭证。这对一个具有您指定名称的文件很有用。您还可以在生成 URL 时强制设置内容长度范围。您的用户将获得 URL 并且必须使用特定方法 (POST/PUT/etc.) 来请求。他们设置内容,而您设置其他所有内容。
我不确定如何使用 Java (it doesn't seem to have support for conditions), but it's simple with Python and boto3:
import boto3
# Get the service client
s3 = boto3.client('s3')
# Make sure everything posted is publicly readable
fields = {"acl": "private"}
# Ensure that the ACL isn't changed and restrict the user to a length
# between 10 and 100.
conditions = [
{"acl": "private"},
["content-length-range", 10, 100]
]
# Generate the POST attributes
post = s3.generate_presigned_post(
Bucket='bucket-name',
Key='key-name',
Fields=fields,
Conditions=conditions
)
测试时确保每个 header 项目都匹配,否则您会收到模糊的访问被拒绝错误。完全匹配可能需要一段时间。
我正在通过 AWS Security Token Service (AWS STS) 创建临时凭证。 并使用这些凭据将文件从 S3 JAVA SDK 上传到 S3。 我需要一些方法来限制文件上传的大小。 我试图在创建用户时添加策略(s3:content-长度范围),但这似乎不起作用。 有没有其他方法可以指定用户可以上传的最大文件大小??
我相信在上传之前没有办法限制对象的大小,对此做出反应会非常困难。解决方法是通过 Lambda 函数或 SNS 主题创建一个 S3 event notification 来触发您的代码。例如,这可以验证或删除对象并通知用户。
另一种方法是生成 pre-signed URL 而不是临时凭证。这对一个具有您指定名称的文件很有用。您还可以在生成 URL 时强制设置内容长度范围。您的用户将获得 URL 并且必须使用特定方法 (POST/PUT/etc.) 来请求。他们设置内容,而您设置其他所有内容。
我不确定如何使用 Java (it doesn't seem to have support for conditions), but it's simple with Python and boto3:
import boto3
# Get the service client
s3 = boto3.client('s3')
# Make sure everything posted is publicly readable
fields = {"acl": "private"}
# Ensure that the ACL isn't changed and restrict the user to a length
# between 10 and 100.
conditions = [
{"acl": "private"},
["content-length-range", 10, 100]
]
# Generate the POST attributes
post = s3.generate_presigned_post(
Bucket='bucket-name',
Key='key-name',
Fields=fields,
Conditions=conditions
)
测试时确保每个 header 项目都匹配,否则您会收到模糊的访问被拒绝错误。完全匹配可能需要一段时间。