我用Node.js编写了应用程序服务器,可以将文件上传到AWS S3存储。为此,我使用https://www.npmjs.com/package/aws-sdk,当我连接并上传到AWS生产存储时,它工作正常。但是,在开发期间,我想将文件上传到本地MinIO服务器(从Docker映像https://hub.docker.com/r/minio/minio/创建):
docker run -p 9000:9000 -p 9001:9001 \
quay.io/minio/minio server /minio --console-address ":9001"
MinIO服务器本身工作正常,我可以在本地登录,创建桶等。但是,当我尝试使用AWS SDK for node.js将文件上传到本地MinIO存储时,我无法做到这一点:
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
#s3Client = new S3Client({
credentials: {
accessKeyId: config.getAwsStorageAccessKeyId(), // from env variables
secretAccessKey: config.getAwsStorageSecretAccessKey(),
},
...(globalConfig.isReleaseVersion() && {
endpoint: config.getAwsStorageEndpoint(), // from env "http://localhost:9001"
}),
});
后来我又尝试上传对象:
await this.#s3Client.send(new PutObjectCommand({
Bucket: config.getAwsStorageWebflowBucketName(), // from env "test" value
Key: 'example.json',
Body: body, // a buffer
}));
我收到错误:
ERROR EndpointError: Custom endpoint `test.127.0.0.1://9001/` was not a valid URI
然而,我可以从浏览器访问地址http://test.localhost:9001/。当我尝试将值'http://localhost:9001/'
作为端点直接传递到S3Client
配置时,我收到错误:
ERROR Error: getaddrinfo ENOTFOUND test.localhost
看起来端口值被我的SDK忽略了。如何解决这个问题?
〈是,我知道有单独的MinIO SDK -我想使用AWS提供的一个,配置中存在endpoint
参数意味着应该可以使用〉
1条答案
按热度按时间lb3vh1jj1#
您是否尝试过“s3ForcePathStyle”选项?我不得不使用此配置使其在本地环境中工作
请访问https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property
所以在你的代码里