【问题标题】:How to limit file's size and mimetype on upload to S3如何在上传到 S3 时限制文件大小和 mime 类型
【发布时间】:2019-09-18 18:29:08
【问题描述】:

在我的应用程序中,我将所有用户的图像保存在 Amazon S3 上。 我正在实现一个用于将图像上传到 S3 的 Web 界面。

在我的 nodejs 后端,我正在创建预签名的发布请求:

const presignedPostParams = ({ userId }) => ({
  Bucket: bucket,
  Conditions: [
    ['starts-with', '$key', `user/${userId}/`],
  ],
  Expires: 60 * 5,
});

  const request = await createPresignedPost(presignedPostParams({ userId }));

在我的前端,我正在向 S3 发送带有预签名参数的表单。

有效。

但现在我可以上传任何文件,而不仅仅是图片。我想限制上传的文件类型(mimetypes)?当然,我可以通过前面的javascript代码来限制它。靠它是不可靠的。

我可以在创建预签名 url 时限制文件 mimetype 吗?

第二个问题:我可以从预签名的网址管理上传文件的权限吗?我想从一个界面上传一些公共文件和一些私人文件(也许我可以通过预签名的 url 实现这一点?)

【问题讨论】:

  • 我发现了一些包含条件["starts-with", "$Content-Type", ""] 的类似代码,所以我怀疑您可以在其中插入特定的内容类型。
  • 谢谢。我正在通过 axios 向 S3 发送发布请求。内容类型始终是“应用程序/json”(因为我正在发送表单,其中只有一个字段是文件)

标签: javascript node.js amazon-s3 pre-signed-url file-storage


【解决方案1】:

我已经得到第二个问题的答案了。

这很容易,但我在文档中没有找到它。

我在后端添加了一个条件(关于这个我在文档上读到的):

  Conditions: [
    { acl: 'public-read' },
    // ...
  ],

并在前端添加了一个字段:'acl': 'public-read'

(我偶然发现它是通过 POST Policy 文档上的链接浏览的)


关于文件大小: 它也很容易: 您应该添加一个条件:["content-length-range", 1048579, 10485760]

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2011-02-11
    • 1970-01-01
    • 2011-06-09
    • 2016-02-25
    • 1970-01-01
    • 2012-02-27
    • 2012-12-06
    • 2016-01-25
    相关资源
    最近更新 更多