如何在S3中保存数据流? aws-sdk-go 示例不起作用?

2023-12-24

我正在尝试将给定的数据流持久保存到 S3 兼容存储中。 在流结束之前,大小是未知的,大小可能从 5MB 到 ~500GB 不等。

我尝试了不同的可能性,但没有找到比自己实现分片更好的解决方案。我最好的猜测是使用我的流填充固定大小的缓冲区并将其写入 S3。 有更好的解决方案吗?也许这是一种对我来说透明的方式,无需将整个流写入内存?

aws-sdk-go 自述文件有一个示例程序,它从 stdin 获取数据并将其写入 S3:https://github.com/aws/aws-sdk-go#using-the-go-sdk https://github.com/aws/aws-sdk-go#using-the-go-sdk

当我尝试用管道输入数据时|我收到以下错误: failed to upload object, SerializationError: failed to compute request body size caused by: seek /dev/stdin: illegal seek 我做错了什么或者这个例子没有像我预期的那样工作吗?

我虽然尝试过 minio-go,但PutObject() https://github.com/xxorde/minio-steam-to-s3/blob/018b08b15b35ce528abc9af621bef28490fff67e/main.go or client.PutObject Streaming() https://github.com/xxorde/minio-steam-to-s3/blob/e74829acddc8f8693efc54da2d8d086d1a5e8a3f/main.go。 这是可行的,但消耗的内存与要存储的数据一样多。

  1. 有更好的解决方案吗?
  2. 是否有一个小示例程序可以将任意数据传输到 S3 中?

你可以使用sdkUploader http://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Uploader处理未知大小的上传,但您需要os.Stdin通过将其包装成“不可查找”io.Reader。这是因为Uploader,虽然它只需要一个io.Reader作为输入主体,它在底层会检查输入主体是否也是一个Seeker如果是的话,它确实会调用Seek在上面。自从os.Stdin只是一个*os.File它实现了Seeker接口,默认情况下,你会得到与你得到的相同的错误PutObjectWithContext.

The Uploader还允许您以可配置大小的块的形式上传数据,并且还可以配置应同时上传的块的数量。

这是链接示例的修改版本,删除了可以保持不变的代码。

package main

import (
    // ...
    "io"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

type reader struct {
    r io.Reader
}

func (r *reader) Read(p []byte) (int, error) {
    return r.r.Read(p)
}

func main() {
    // ... parse flags

    sess := session.Must(session.NewSession())
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 20 << 20 // 20MB
        // ... more configuration
    })

    // ... context stuff

    _, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{
        Bucket: aws.String(bucket),
        Key:    aws.String(key),
        Body:   &reader{os.Stdin},
    })

    // ... handle error
}

至于这是否是一个比minio-go我不知道,你必须自己测试一下。

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

如何在S3中保存数据流? aws-sdk-go 示例不起作用? 的相关文章

  • 使用 asp.net MVC 拖放上传到 aws s3

    我在我正在处理的基本 mvc 项目上上传文件时遇到一些问题 我有一个拖 放功能 我想连接到 aws s3 我可以使用当前应用程序将文件放入本地文件夹中 并按照此处的步骤操作 gt 使用 c Sharp 将文件上传到亚马逊 s3 非常简单 h
  • 如何在 Visual Studio Code 中为 Golang 启用竞争检测器?

    我搜索了很多网页来找到我应该放入哪个短语settings json在 VS Code Golang 扩展 由 Microsoft 发布 中添加构建标志 在我的例子中是竞赛检测器 I added go buildFlags race 在扩展名
  • 如何在 Goji (Golang) 中使用不同的中间件创建单独的路由组?

    我正在使用Goji https github com zenazn goji https github com zenazn goji 并希望定义具有自己的中间件的路由组 例如 下面的所有路径 company应使用 LDAP 身份验证并定义
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • 无法连接到代理“证书由未知机构签名”

    我正在尝试通过 Kubernetes 部署上的 cloudsql proxy 容器连接到 CloudSQL 实例 我已安装 cloudsql 凭据以及值GOOGLE APPLICATION CREDENTIALS set 但是 我的日志中仍
  • 自动提取S3中的.gz文件

    我正在尝试找到一种解决方案 以便在 ALB 日志文件自动从 ALB 上传到 S3 时提取 gz 格式的 ALB 日志文件 我的桶结构是这样的 log bucket alb 1 AWSLogs account number elasticlo
  • 如何在golang模板上打印JSON?

    我需要在客户端有一个对象 所以我使用 json marshal 将其转换为 JSON 并将其打印到模板中 该对象被打印为转义 JSON 字符串 我期待它是var arr o1 o2 但它是var arr o1 o2 我知道我可以在客户端进行
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 将文件从 url 上传到 s3 存储桶

    我有一个在 Heroku 中运行的 Nodejs 程序 它为我提供了文件的 URL 这些文件需要存储在 s3 存储桶中 据我了解 无法将文件从 url 直接上传到 s3 存储桶 您建议我如何将文件从 URL 获取到 s3 存储桶 我见过有关
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • 如何使用 aws-cli 访问 Google Cloud Storage 存储桶

    我可以访问 aws 和 Google Cloud Platform 是否可以执行以下操作 使用 aws cli 列出 Google Cloud Storage 存储桶 使用 aws cli 将 CSV 文件放入 Google Cloud S
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4
  • AWS API Gateway - Lambda - 内部服务器错误

    我正在通过 lambda 将图像上传到 s3 一切正常 没有错误 但 API Gateway 的响应是 500 内部服务器错误 我按照本教程配置了 api gateway 对与 Amazon API Gateway 的 API 集成的二进制
  • GORM中的一对多递归关系

    我需要有一个Organization与父级有关系 像这样的事情 type Organization struct gorm Model Parent Organization gorm ForeignKey ParentId Name st
  • 使用 Gorilla 会话自定义后端有什么优势?

    我想使用 Redis 进行会话管理 但我不明白使用 Redis 作为 Gorilla 会话包的自定义后端比直接使用它有什么优势 Gorilla 会话包的链接 http www gorillatoolkit org pkg sessions

随机推荐

  • Play 2.0 RESTful请求后处理

    关于这个问题 https stackoverflow com questions 11060761 how can my play 2 app respond to different accept headers from the cli
  • 没有模块命名常量

    我想用 Tastypie 框架做示例应用程序 我将 Tastypie 添加到已安装的应用程序并进行了修改urls py根据需要 添加from tastypie api import Api 但当我打开http localhost 8000
  • iPhone 应用程序中出现奇怪的不需要的动画

    我不想发布这个 但我在我正在开发的 iPhone 应用程序中看到了不需要的动画 我以前从未在我的应用程序或任何其他应用程序中见过这种情况 此应用程序仅适用于 iOS 4 2 和 iPhone 即使在 iPhone4 上也会发生这种奇怪的情况
  • 元组函数的 N 元版本

    是否有一个库具有 n 元版本的元组函数 例如first 等 通过 Template Haskell 或使用其他方法 理想情况下我想说 select 3 0 1 我们用它来表示 lambda x y z gt x y 对于一个通用的 对于功能
  • 如何在 Internet Explorer 中的全高表格中制作全高单元格

    我有下一个html代码 table style width 100 height 100 tr td td tr table
  • 我如何教 ProGuard 删除它保留但我不使用的东西?

    我有一个 Android 项目proguard rules pro文件为app模块仅包含以下内容 ProGuard rules dontobfuscate dontwarn android arch util paging CountedD
  • 获取特定格式日期的唯一 ID?

    我有可以生成随机唯一 ID 的代码 但是有没有办法可以编辑此代码 以便它以特定方式 如 yyyy mm dd 0001 获取日期 我希望每次单击generateid按钮时最后4位数字加1 所以它将更改为 0002 这是我当前的代码 有没有可
  • 如何在 Java 中识别/处理文本文件换行符?

    我从不同的系统获取不同格式的文件 我需要将它们导入到我们的数据库中 导入过程的一部分是检查行长度以确保格式正确 我们似乎在处理来自添加了一个字符的 UNIX 系统的文件时遇到了问题 我怀疑这是由于 UNIX 和 Windows 平台上的回车
  • Airflow:如何删除 DAG?

    我已经启动了 Airflow 网络服务器并安排了一些 dags 我可以在 Web GUI 上看到这些 dags 如何删除正在运行并在 Web GUI 中显示的特定 DAG 有 Airflow CLI 命令可以做到这一点吗 我环顾四周 但找不
  • 在 AMP 中运行 JavaScript

    我对 JavaScript 应该如何在 AMP 页面中运行感到有点困惑 据我了解 我的 JavaScript 必须在 iframe 中执行 此类 iframe 必须放置在页面下方 至少从顶部起 75 并且必须通过 https 提供服务 这确
  • std::runtime_error::runtime_error(const std::string&) 如何满足 std::Exception 对 throw() 的要求?

    std exception要求它的构造函数是throw Yet std runtime error接受一个std string作为它的参数 这表明它正在存储一个std string某处 因此 作业或复制构造必须在某个地方进行 而对于std
  • http.sslVerify=false 不会在 git config 中禁用 ssl 验证

    Issue 我一直在尝试通过来自企业 GitHub 服务器的 http 代理 在 git 全局配置中设置 从 Ubuntu AWS 实例克隆 git 存储库 从代理克隆可以工作 但是从实例克隆 通过代理 我收到以下错误 致命 无法访问 ht
  • 在 Visual Studio 中调试 JavaScript 时出现“没有为当前文档加载符号”

    我正在开发一个 NET 3 5 网站 一个解决方案下有三个项目 我在这个项目中使用 jQuery 我想使用 Visual Studio JavaScript 调试器来单步执行我的 JavaScript 代码 如果我在任何 js 文件中设置断
  • QLabel Qt/c++ 文本的渐变颜色

    我尝试为 QLabel 文本设置渐变颜色 我正在尝试使用 setStyleSheet 函数 但它不起作用 我阅读这篇文章 https www qtcentre org threads 32781 don t work qlineargrad
  • data.table join + update with mult='first' 给出了意想不到的结果

    在下面的示例中 我有一个用户表和一个事务表 其中一个用户可以有 0 个 1 个或多个事务 我执行连接 更新mult first 在 users 表上尝试插入一列 指示每个用户第一次发生事务的日期 library data table v1
  • 如何从 XLL UDF 返回数组

    我正在尝试使用 C API 为 Excel 编写一个数组构造函数作为工作表函数 Goal array cons 1 2 3 gt 1 2 3 但是 我没有正确初始化 XLOPER12 在 Excel 中 我的函数当前返回 NUM 我正在将参
  • 模块已经成功安装,但是导入时却找不到? - Python

    我正在尝试使用 graphviz Python 模块 但遇到了这个问题 我在命令提示符下安装了它 但它没有显示在 IPython 中 我还有一个 Python 3 5 32 位 解释器 它显示在其中 但我正在尝试弄清楚如何安装它 以便它在
  • 如何找出 Instruments 中保留对象的内容?

    我最近将我的 iOS 项目转换为 ARC 视图控制器之一没有调用其 dealloc 方法 并且没有根据 Instruments 进行释放 我已经仔细检查了我的所有属性并将适当的属性设置为弱 我还确保任何将视图控制器作为委托的东西都在 vie
  • ZLIB 解压 - 客户端

    我正在以 ZLIB 压缩输入流 使用 Javascript Ajax JQuery 我需要在客户端解压缩它 有办法这样做吗 我已经在 J AVA 中工作了 如下所示 但需要在客户端执行此操作 url new URL getCodeBase
  • 如何在S3中保存数据流? aws-sdk-go 示例不起作用?

    我正在尝试将给定的数据流持久保存到 S3 兼容存储中 在流结束之前 大小是未知的 大小可能从 5MB 到 500GB 不等 我尝试了不同的可能性 但没有找到比自己实现分片更好的解决方案 我最好的猜测是使用我的流填充固定大小的缓冲区并将其写入