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

2024-05-12

我有用 Node.js 编写的应用程序服务器,它将文件上传到 AWS S3 存储。为此我正在使用https://www.npmjs.com/package/aws-sdk https://www.npmjs.com/package/aws-sdk当我连接并上传到我的 AWS 生产存储时,它工作正常。但是在开发过程中我想将文件上传到本地 MinIO 服务器(从 docker 镜像创建)https://hub.docker.com/r/minio/minio/ 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 服务器本身工作正常,我可以在本地登录、创建存储桶等。但是,当我尝试使用适用于 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"
    }),
});

后来我尝试上传对象:

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://test.localhost:9001/从我的浏览器。当我尝试直接传递值时'http://localhost:9001/'作为端点S3Client配置,我收到错误:

ERROR Error: getaddrinfo ENOTFOUND test.localhost

看来我的 SDK 忽略了端口值。如何解决这个问题?

endpoint配置中的参数意味着它应该是可能的>


您需要做的就是设置s3ForcePathStyle配置选项true。 或者(在 sdk V3 中)它可以有名称forcePathStyle。在我的代码中我这样做:

const awsConfig: S3.Types.ClientConfiguration = {
  s3ForcePathStyle: true
};

我知道有一个类似的答案,但它确实解决了我的问题。

我还提供了其他选项:

sslEnabled: false
endpoint: http://localhost:port/
accessKeyId: dummy
secretAccessKey: dummydummy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS SDK S3 node.js 连接到本地 MinIO 服务器 的相关文章

随机推荐

  • WebView 不运行 loadHTMLString 中给出的 JavaScript

    我不明白为什么这不起作用 我的桌面上有一个 test htm 文件 如下所示 This is x 2 我有一个 WebVie
  • 如何追踪手柄泄漏?

    在我的一个应用程序中 我观察到句柄数量不断增加 在不使用应用程序的情况下 该数字大约每秒增加一次 因此后台处理代码的某些部分一定存在句柄泄漏 我如何追踪此类泄漏 有什么工具可以帮助解决这个问题吗 跟踪句柄泄漏时要寻找哪些模式 导致手柄泄漏的
  • 获取 Postgres 数据库中每个表的行数

    获取数据库中所有表的行数的最有效方法是什么 我正在使用 Postgres 数据库 结果示例 table name row count some table 1 234 foobar 5 678 another table 32 如果您想要特
  • git分支和标签如何存储在磁盘中?

    我最近检查了我工作中的一个 git 存储库 其中有 10 000 多个分支和 30000 多个标签 新克隆后 存储库的总大小为 12Gigs 我确信没有理由拥有 10000 个分支机构 所以我相信它们会占用磁盘中相当大的空间 所以 我的问题
  • 调用 LWRP 时的 Cookbook 名称前缀

    Summary 我可以使用外部说明书中的 LWRP 而不添加说明书名称前缀吗 例如 如果mycookbook包含mylwrp资源 我该怎么做 include recipe mycookbook Contains mylwrp mylwrp
  • GetX 解绑流

    我正在使用bindStream 函数与GetX封装在控制器内 class FrediUserController extends GetxController override void onReady super onReady fina
  • SSMS 与 Sybase ASE 的连接

    有没有办法使用 Sql Server Management Studio 2008 连接到 Sybase ASE 数据库实例 我尝试使用其他工具进行连接 但它们非常有限 我想使用 SSMS 您可以使用这个工具 SqlDbx http www
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • jqgrid editoptions:必需的不起作用

    好吧 不确定我在这里做错了什么 list jqGrid url URL datatype json mtype GET colModel label Index index Index key true hidden true label
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • Unity IoC 和 MVC 3 Beta - 将 IRepository 传递给控制器​​构造函数

    MVC 3 中有什么变化吗 我已经尝试了互联网上所有将 Unity 设置为我的 IoC 容器的示例 但我不断收到错误消息 指出 Unity 无法解析我的 UserController 这是我的 UserController 上的构造函数 p
  • 如何在powershell中将一个大文本文件拆分为多个文件

    你好 我有一个像这样的大文本文件 BIGFILE TXT COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COLUMN6 COLUMN7 COLUMN8 11 24 2013 50 67 51 22 50 6
  • 如何根据 Pyspark 中另一列的表达式评估有条件地替换列中的值?

    import numpy as np df spark createDataFrame 1 1 None 1 2 float 5 1 3 np nan 1 4 None 0 5 float 10 1 6 float nan 0 6 floa
  • 如何在 IntelliJ IDEA 中使用新的应用程序运行配置 UI 包含提供的依赖项?

    用于运行 java 应用程序的新 IntelliJ IDEA 2020 3 界面中的 包含提供范围的依赖项 复选框在哪里 在早期版本中它存在 然后突然消失 修改选项 使用模块的类路径 单击该模块 启用包含具有 提供 范围的依赖项复选框 为相
  • 忽略Python字符串中的大小写[重复]

    这个问题在这里已经有答案了 在Python中比较字符串 忽略大小写 的最简单方法是什么 当然可以这样做 str1 lower 我想我正在寻找与 C 的 stricmp 等效的函数 需要更多上下文 所以我将用一个简单的例子来演示 假设您要对一
  • Select2 4 自定义数据适配器

    我正在尝试根据此处的示例创建自定义数据适配器 http select2 github io announcements 4 0 html query to data adapter http select2 github io announ
  • jQuery:如何检查一个元素是否是最后一个同级元素?

    如何检查一个元素是否是最后一个兄弟元素 对于连续的最后一个单元格 我想执行不同的操作 这不起作用 td each function var this this if this this parent last td alert 123 如果
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • 无限循环中的 JavaScript 警报消息

    无限循环中的警报框 在这里我尝试在两个连续字段上放置弹出警报消息 这样它们就不能留空 我知道为什么会发生这种情况 因为当第一个函数的 onblur 事件启动时 它会将焦点放在第二个字段上 当它跳回第一个时 第二个文本字段的 onblur 启
  • AWS SDK S3 node.js 连接到本地 MinIO 服务器

    我有用 Node js 编写的应用程序服务器 它将文件上传到 AWS S3 存储 为此我正在使用https www npmjs com package aws sdk https www npmjs com package aws sdk当