如何在上传到 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]
在我的应用程序中,我将所有用户的图像保存在 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]