【问题标题】:Specify Maximum File Size while uploading a file in AWS S3在 AWS S3 中上传文件时指定最大文件大小
【发布时间】:2026-02-01 09:30:01
【问题描述】:

我正在通过 AWS Security Token Service (AWS STS) 创建临时凭证。 并使用这些凭据将文件从 S3 JAVA SDK 上传到 S3。 我需要一些方法来限制文件上传的大小。 我试图在创建用户时添加策略(s3:content-length-range),但这似乎不起作用。 有没有其他方法可以指定用户可以上传的最大文件大小??

【问题讨论】:

  • 嗨,欢迎来到 SO。请发布您的代码,以便其他人可以查看您已经尝试过的内容,然后建议解决方案。

标签: amazon-web-services amazon-s3 aws-sts


【解决方案1】:

另一种方法是生成预签名 URL 而不是临时凭据。这对于一个具有您指定名称的文件会很好。您还可以在生成 URL 时强制设置内容长度范围。您的用户将获得 URL,并且必须对请求使用特定的方法(POST/PUT/等)。他们设置内容,而您设置其他所有内容。

我不知道如何使用 Java 做到这一点(它似乎不支持条件),但使用 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
)

在进行测试时,请确保每个标题项都匹配,否则您会收到模糊的拒绝访问错误。完全匹配可能需要一段时间。

【讨论】:

    【解决方案2】:

    我相信在上传之前没有办法限制对象的大小,对此做出反应会非常困难。一种解决方法是创建一个S3 event notification,通过 Lambda 函数或 SNS 主题触发您的代码。例如,这可以验证或删除对象并通知用户。

    【讨论】:

    • 但是,我相信在 Browser Based POST Policy 中我们可以指定 content-length-range,它可以限制上传大文件。在 SDK 中也是如此。
    • 问题中建议的 content-length-range 是 HTML 表单 POST 策略条件(不是 IAM 策略条件)。使用预签名表单上传确实支持这种限制,但这是唯一的这种机制。 docs.aws.amazon.com/AmazonS3/latest/API/…