amazon-web-services - aws S3 存储桶:从浏览器上传 POST 文件时出现内部服务器错误 500
问题描述
我<Code>InternalError</Code><Message>We encountered an internal error. Please try again.</Message>
在将 POST 表单数据上传到 s3 存储桶时收到。
S3配置:
const attachmentBucket = new Bucket(this, 'caS3Bucket', {
bucketName: environmentName + '.caattachments',
cors: [{
allowedMethods: [HttpMethods.GET, HttpMethods.POST],
allowedOrigins: ['*'],
allowedHeaders: ['*'],
maxAge: 3000
} as CorsRule]
} as BucketProps);
通过 lambda 预签名上传 url:
const params = {
Bucket: process.env.S3_BUCKET!.split(':')[5],
Fields: {
key: payload.path,
acl: 'public-read'
},
Expires: 3600
};
const postData = await new Promise(resolve => {
s3.createPresignedPost(params, (err, data) => {
resolve(data);
});
}) as AWS.S3.PresignedPost;
我将 postData.fields 中的所有参数附加到文件的输入表单中。有没有办法调试这个?
解决方案
问题是表单缺少“策略”字段。我希望 aws 错误更具描述性。最终的工作表单字段如下所示:
const formData: FormData = new FormData();
formData.append('key', uploadData.fields.key);
formData.append('acl', uploadData.fields.acl);
formData.append('bucket', uploadData.fields.bucket);
formData.append('X-Amz-Algorithm', uploadData.fields.algorithm);
formData.append('X-Amz-Credential', uploadData.fields.credential);
formData.append('X-Amz-Date', uploadData.fields.date);
formData.append('X-Amz-Security-Token', uploadData.fields.token);
formData.append('Policy', uploadData.fields.policy);
formData.append('X-Amz-Signature', uploadData.fields.signature);
formData.append('file', file, file.name);
推荐阅读
- swift - Firebase FCM 和订阅主题说明
- linechart - Echart:折线图反向图例切换行为
- python - 装饰实例方法/类方法的 Python 装饰器是否有可能知道函数将绑定到的类?
- javascript - 元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:未定义。- Esri 传单
- python - 在 pycharm 中使用 os.scandir() 会导致“未解析的属性引用”警告
- ios - JTAppleCalendar scrollToDate 在遥远的日期不起作用
- sql - SQL 作业失败并显示“用户 X 登录失败,错误 18456”
- python - 如何在python中为纯文本添加后缀
- python - 如何从 XML 中获取属性而不将它们转换为单行
- html - 阴影在 iOS Safari 上无法正常工作