javascript - 如何使用带有 node.js 的 s3 api 将文件上传到 Wasabi 存储桶?
问题描述
我在 Amazon s3 存储桶中实现了上传文件,如下所示,它工作正常:
const S3 = require('aws-sdk/clients/s3');
const AWS = require('aws-sdk');
const accessKeyId = 'AKIAYVXDX*******';
const secretAccessKey = 'gxZpdSDnOfpM*****************';
const s3 = new S3({
region: 'us-east-1',
accessKeyId,
secretAccessKey
});
s3.putObject({
Body: 'Hello World',
Bucket: "dev-amazon",
Key: 'hello.txt'
}
, (err, data) => {
if (err) {
console.log(err);
}
});
我需要在芥末桶中实现上传文件。
我尝试如下:
const S3 = require('aws-sdk/clients/s3');
const AWS = require('aws-sdk');
const wasabiEndpoint = new AWS.Endpoint('s3.wasabisys.com');
const accessKeyId = 'PEIL4DYOY*******';
const secretAccessKey = 'D4jIz3tjJw*****************';
const s3 = new S3({
endpoint: wasabiEndpoint,
region: 'us-east-2',
accessKeyId,
secretAccessKey
});
s3.putObject({
Body: 'Hello World',
Bucket: "dev-wasabi",
Key: 'hello.txt'
}
, (err, data) => {
if (err) {
console.log(err);
}
});
`console.log(err) 的结果是:
err {"message":"我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方式。","code":"SignatureDoesNotMatch","region":null,"time":"2019- 10-30T09:39:19.072Z","requestId":null,"statusCode":403,"retryable":false,"retryDelay":64.72166771381391}
devtools 中的控制台错误:
PUT https://dev-wasabi.s3.us-east-2.wasabisys.com/5efa9b286821fab7df3ece8dc3d6687ed32 403(禁止)
我的代码有什么问题?
解决方案
我自己找到了这个问题的原因。
wasabiEndpoint
错了。它应该是
const wasabiEndpoint = new AWS.Endpoint('s3.us-east-2.wasabisys.com ');
根据docs,服务 URL 应该因地区而异。
Wasabi 美国东部 1(弗吉尼亚北部):s3.wasabisys.com 或 s3.us-east-1.wasabisys.com
芥末美国东部 2(弗吉尼亚北部):s3.us-east-2.wasabisys.com
芥末美国西部 1(俄勒冈州):s3.us-west-1.wasabisys.com
Wasabi EU Central 1(阿姆斯特丹):s3.eu-central-1.wasabisys.com
如果这对某人有帮助,我将不胜感激。:)
推荐阅读
- node.js - 如何使用 Sinon 存根 Mongoose 方法来测试 DAO?
- groovy - Micronauts AWS API Gateway Authorizer JSON 输出问题
- ios - 从 ViewControllerA 更新 ViewControllerB 中的标签(ViewController 都在同一视图中的容器中)
- csv - 在 neo4j 中创建一对多关系
- excel - Excel 中的高级筛选
- python - 来自 boto3 定价客户端的区域名称和位置之间的映射
- css - 使用 Angular 材质覆盖 scss 变量
- swift - 可编码以使用单一模型映射不同的键值
- python - TensorFlow 突触输出和输入为文本文件
- java - 如果失败,如何在 SuiteClass 中进行 JUnit 测试重试?