AWS SDK S3 node.js连接到本地MinIO服务器

6mw9ycah  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(266)

我用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参数意味着应该可以使用〉

lb3vh1jj

lb3vh1jj1#

您是否尝试过“s3ForcePathStyle”选项?我不得不使用此配置使其在本地环境中工作

options.s3ForcePathStyle = true

请访问https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property
所以在你的代码里

...(globalConfig.isReleaseVersion() && {
    endpoint: config.getAwsStorageEndpoint(), // from env "http://localhost:9001",
    s3ForcePathStyle: true,
}),

相关问题