s3直接上传限制文件大小和类型

Posted

技术标签:

【中文标题】s3直接上传限制文件大小和类型【英文标题】:s3 direct upload restricting file size and type 【发布时间】:2012-11-03 15:05:57 【问题描述】:

一个新手问题,但我用谷歌搜索了一下,似乎找不到任何解决方案。

我希望允许用户直接将文件上传到 S3,而不是先通过我的服务器。通过这样做,在实际上传到 S3 之前,有什么方法可以检查文件的大小限制和允许的类型?最好不要使用flash,而是使用javascript

【问题讨论】:

【参考方案1】:

如果您谈论的是安全问题(人们将大文件上传到您的存储桶),是的,您可以通过基于浏览器的上传到 S3 来限制文件大小。

这里是一个“policy”变量的例子,其中“content-length-range”是关键点。

"expiration": "'.date('Y-m-d\TG:i:s\Z', time()+10).'",
"conditions": [
    "bucket": "xxx",
    "acl": "public-read",
    ["starts-with","xxx",""],
    "success_action_redirect": "xxx",
    ["starts-with", "$Content-Type", "image/jpeg"],
    ["content-length-range", 0, 10485760]
]

在这种情况下,如果上传文件大小> 10mb,上传请求将被亚马逊拒绝。

当然,在开始上传过程之前,您应该使用 javascript 检查文件大小,如果是,则发出一些警报。

getting file size in javascript

【讨论】:

请参阅aws.amazon.com/articles/1434,了解有关如何应用该政策以及其他注意事项的更多详细信息。 该策略是在客户端设置的表单的一部分。如果黑客足够热心,他们可以解码您的 base64 策略并将任何文件大小或类型放入其中。 @Kareem 策略文档已签名,因此任何篡改都会导致请求失败。 这种策略格式还有效吗?当我尝试将此策略传递给 s3.putBucketPolicy 时,节点 aws-sdk 抛出 MalformedPolicy: Unknown field conditions 如何限制文件类型?喜欢内容类型?【参考方案2】:

AWS 写了一个教程来解释如何create html POST forms that allow your web site visitors to upload files into your S3 account using a standard web browser。它使用 S3 预签名 URL 来防止篡改,您可以按文件大小限制访问。

【讨论】:

链接已损坏。 我修复了链接【参考方案3】:

要做你想做的事,你需要通过你自己的网络服务上传。无论如何,这可能是最好的,因为向您的最终用户提供对 S3 存储桶的全局写入访问权限是一场安全噩梦,更不用说没有什么可以阻止他们上传大文件并增加您的费用。

【讨论】:

以上是关于s3直接上传限制文件大小和类型的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript实现限制文件上传类型和大小

使用节点js的S3文件上传流

iview实现文件上传 限制上传格式大小

上传文件类型type和大小size限制

el-upload上传时的文件类型和大小限制失效,如何处理?

HTML ajax 上传文件限制文件的类型和文件大小