AWS S3 的 createPresignedPost API 本质上只是为我们生成一个包含签名的 POST URL,用于上传文件到指定的 S3 存储桶中。这个 URL 可以设置一些限制条件,比如文件大小限制等,但是存在安全漏洞,使得通过浏览器或应用程序直接上传的文件大小不受限制。
为了解决这个问题,我们可以使用 AWS S3 的服务器端 SDK 和 AWS API Gateway 来实现对上传文件大小的完全控制,具体步骤如下:
1.首先,使用 generatePresignedUrl 方法生成 POST URL,设置限制条件,如下所示:
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var params = {
Bucket: 'your-bucket-name',
Fields: {
key: 'file-upload-example/${filename}',
// 其他参数选项
},
Conditions: [
["content-length-range", 0, 10485760] // 限制上传文件大小为10MB
],
Expires: 3600 // URL 有效时长
};
var presignedPost = s3.createPresignedPost(params);
console.log(JSON.stringify(presignedPost));
2.在 AWS API Gateway 中创建一个 POST API,并配置集成为 AWS Lambda 或 HTTP,将请求转发到后端。
3.在 API Gateway 中添加验证器或者授权器,确保只有授权用户才能使用 API。
4.在 API Gateway 中设置请求长度限制,该限制将作用于浏览器/AWS SDK 发送到 API Gateway 的请求。
这种方法将完全控制上传的文件大小,而不会受到浏览器/应用程序的限制。
上一篇:awsS3cp命令是原子性的吗?
下一篇:AWSS3存储桶403错误