Fur*_*man 5 amazon-s3 node.js minio
我有用 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"
Run Code Online (Sandbox Code Playgroud)
MinIO 服务器本身工作正常,我可以在本地登录、创建存储桶等。但是,当我尝试使用适用于 Node.js 的 AWS SDK 将文件上传到本地 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"
}),
});
Run Code Online (Sandbox Code Playgroud)
后来我尝试上传对象:
await this.#s3Client.send(new PutObjectCommand({
Bucket: config.getAwsStorageWebflowBucketName(), // from env "test" value
Key: 'example.json',
Body: body, // a buffer
}));
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR EndpointError: Custom endpoint `test.127.0.0.1://9001/` was not a valid URI
Run Code Online (Sandbox Code Playgroud)
但是我可以从浏览器访问地址http://test.localhost:9001/ 。当我尝试将值'http://localhost:9001/'
作为端点直接传递给S3Client
配置时,出现错误:
ERROR Error: getaddrinfo ENOTFOUND test.localhost
Run Code Online (Sandbox Code Playgroud)
看来我的 SDK 忽略了端口值。如何解决这个问题?
<是的,我知道有单独的 MinIO SDK - 我想使用 AWS 提供的一个,endpoint
配置中参数的存在意味着它应该是可能的>
小智 0
http://localhost:9001 不是正确的 URL
尝试以下操作,它应该可以工作
const s3Client = new S3Client({
region: "region_set_in_minio",
credentials: {
accessKeyId: "minio_access_key",
secretAccessKey: "minio_secret_access_key",
},
endpoint: "http://127.0.0.1:9000",
});
Run Code Online (Sandbox Code Playgroud)
您可以从 minio 控制台设置 minio 区域。
去Administrator -> Settings -> Region
归档时间: |
|
查看次数: |
4375 次 |
最近记录: |