如何在上传到 S3 时限制文件大小和 MIME 类型

How to limit file's size and mimetype on upload to S3

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

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

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

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

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

有效。

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

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

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

我找到了第二个问题的答案。

很简单,但是文档里没找到。

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

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

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

(我通过 POST 政策文档上的链接偶然发现了它)


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