node.js - AWS S3 在同一个 EC2 上运行
问题描述
我有一项服务在运行 AWS-S3 的同一实例上运行,在这种情况下,将文件推送到 S3 存储桶时我不必提供凭据。
这是我的代码,但它向我显示了这个错误:
message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: 2019-12-13T22:30:56.325Z,
requestId: '3F6AA6FAC6787B36',
extendedRequestId:'yQ4y6uthaTDBr6SuoXbI0g0cLWY40SWleATXrBijKrAbhcmsWTYAL+wCBlZpPM/6ytRc8qbIJP4=',
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 44.582589819600926
这是代码:
public async writeFileToS3(datasetFile: any): Promise<boolean> {
try {
this.s3Bucket = new S3({ region: 'us-east-1' });
const readFile = this.util.promisify(this.fileWriter.readFile);
const unlinkFile = this.util.promisify(this.fileWriter.unlink);
const s3BucketName = this.appConfig.get<string>(
'infra.fileWriter.bucket'
);
const data = await readFile(datasetFile.path);
const params = {
Bucket: s3BucketName,
Key: datasetFile.originalname,
Body: data,
ACL: 'public-read'
};
return await new Promise<boolean>((resolve, reject) => {
this.s3Bucket.upload(params, function(err: any) {
unlinkFile(datasetFile.path);
if (err) {
console.log('await call: ' + err);
reject(err);
} else {
resolve(true);
}
});
});
} catch (err) {
console.log(err);
throw new OperationError('Error writing file to S3');
}
注意:AWS 配置得很好,因为我有另一个使用 Python 与 S3 交互的服务,它工作正常,但是这个服务使用 aws-sdk 进行 Javascript。
解决方案
问题已解决,这是因为提供了region
和ACL
. 只需删除它们即可解决问题。
推荐阅读
- puppeteer - Node.js Puppeteer 如何获取 TR ID 值?
- php - 将数据保存到另一个表后插入另一个表
- java - 如何通过 Firebase 添加注册?
- javascript - 设置按钮超时 - 禁用登录
- c# - 等距网格中的钳位作用距离
- java - DOC 到 PDF 的转换,为什么 FileOutputStream 会生成损坏的 pdf?
- javascript - VS Code 中的 JavaScript 代码分析 - 防止重新声明变量等
- javascript - 使用 Joi 验证空字符串
- java - 如何使用没有函数的 lambda从现有列表创建新列表
- bash - 从 curl GET 响应中读取 json 值