【问题标题】:S3 Pre-signed POST validate file type?S3 预签名 POST 验证文件类型?
【发布时间】:2017-01-06 16:34:00
【问题描述】:

我知道可以使用 content-length-range 标头限制文件大小。但是是否可以验证文件类型?

https://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html#PolicyConditions

我看到有一个 Content-Type 标头,如果我将其设置为 audio/mp3 将只允许 MP3 文件,如果文件不是 mp3 则返回错误?

我发现了这个先前的问题,但答案只提到验证文件大小:s3 direct upload restricting file size and type

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    您可以在 POST 请求中指定 Content-Type。

    您也可以在签名处指定它,因此帖子必须使用该 Content-Type:

    { "expiration": "2007-12-01T12:00:00.000Z",
      "conditions": [
        {"acl": "public-read" },
        {"bucket": "johnsmith" },
        {"Content-Type: "audio/mp3"}
      ]
    }
    

    Creating an HTML Form (Using AWS Signature Version 4)

    编辑:在您发现的上一个问题中,他们实际上是在检查 Content-Type。

    【讨论】:

    • 我在策略上指定了Content-Type,但我认为这只是意味着它将将该标题添加到上传的任何文件中。我刚刚尝试上传一张 png 图像,但它仍在上传,并在元数据中添加了 Content-Type: audio/mp3 标头。
    • 策略上的 Content-Type 必须与在 POST 请求中发送的 Content-Type 相同,因此您可以在后端(或进行签名的任何位置)设置 Content-Type而不是从前端发送 Content-Type。您还可以在签名时检查后端中的 Content-Type,如果 Content-Type 不是您想要的,则失败。
    • 所以当用户在发布表单之前选择要上传的文件时,我需要更改 Content-Type 标头吗?
    • 只要根据文件内容类型设置Content-Type,在后台勾选,返回签名上传文件即可。
    • 嗯,那么我需要两个 AJAX 请求。一个用于检查更改的文件类型,另一个用于直接上传到 S3?
    猜你喜欢
    • 2021-10-18
    • 2019-01-26
    • 1970-01-01
    • 2022-06-13
    • 2021-03-08
    • 2021-10-13
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多