如何使用 boto 将文件从 Amazon S3 流式传输到 Rackspace Cloudfiles?

2023-12-14

我正在将文件从 S3 复制到 Cloudfiles,并且我想避免将该文件写入磁盘。 Python-Cloudfiles 库有一个 object.stream() 调用,看起来正是我所需要的,但我在 boto 中找不到等效的调用。我希望我能够做类似的事情:

shutil.copyfileobj(s3Object.stream(),rsObject.stream())

这可以用 boto (或者我想任何其他 s3 库)吗?


该线程中的其他答案与 boto 相关,但 S3.Object 在 boto3 中不再可迭代。所以,下面的代码不起作用,它会产生一个TypeError: 's3.Object' object is not iterable错误信息:

s3 = boto3.session.Session(profile_name=my_profile).resource('s3')
s3_obj = s3.Object(bucket_name=my_bucket, key=my_key)

with io.FileIO('sample.txt', 'w') as file:
    for i in s3_obj:
        file.write(i)

在 boto3 中,对象的内容位于S3.Object.get()['Body']这是一个可迭代的版本1.9.68但以前不是。因此,以下内容适用于最新版本的 boto3,但不适用于早期版本:

body = s3_obj.get()['Body']
with io.FileIO('sample.txt', 'w') as file:
    for i in body:
        file.write(i)

因此,旧 boto3 版本的替代方法是使用 read 方法,但这会将整个 S3 对象加载到内存中,而在处理大文件时并不总是可行:

body = s3_obj.get()['Body']
with io.FileIO('sample.txt', 'w') as file:
    for i in body.read():
        file.write(i)

But the read方法允许传入amt参数指定我们要从底层流读取的字节数。可以重复调用此方法,直到读取整个流:

body = s3_obj.get()['Body']
with io.FileIO('sample.txt', 'w') as file:
    while file.write(body.read(amt=512)):
        pass

深入挖掘botocore.response.StreamingBody代码一意识到底层流也是可用的,因此我们可以按如下方式迭代:

body = s3_obj.get()['Body']
with io.FileIO('sample.txt', 'w') as file:
    for b in body._raw_stream:
        file.write(b)

在谷歌搜索时,我也看到了一些可以使用的链接,但我还没有尝试过:

  • 包裹流体
  • 另一个相关主题
  • boto3 github 中请求 StreamingBody 是正确流的问题- 已经关闭了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 boto 将文件从 Amazon S3 流式传输到 Rackspace Cloudfiles? 的相关文章

随机推荐

  • 使用 MarshalByRefObject 跨应用程序域传递数据

    我在两个 NET 应用程序域之间传递一些数据时遇到了一些麻烦 我希望这里有人可以帮助我 基本上我拥有的是一个主要应用程序 Main 加载程序集A and B进入它的主域 然后当我运行插件时 C Main调用创建域方法B它创建一个新域并加载C
  • “[类名]”未命名 C++ 中的类型

    我正在使用列表列表编写图表 为此 我有两个类 每个类都有一个指向同一类的另一个对象的指针和一个指向第二个类的对象的指针 这是代码 文件V h ifndef VERTICEPUNT H define VERTICEPUNT H include
  • 使用 mailR 包通过 R 通过 Outlook 发送经过身份验证的邮件

    如何通过 Outlook 从 R 发送邮件 我被告知要使用sendmailR包 但我不知道如何指定某些控制设置 例如端口 用户名和密码 我也被重定向到这个帖子 但这并没有帮助 我切换到mailR包裹 我可以从其他服务器发送邮件 例如smtp
  • 无法通过脚本更改游戏对象颜色?

    我有一个 UI 画布 其中的图像与画布大小相同 这Image has an rgba of 0 0 0 0 使其不可见 因为a是 0 我想让图像从脚本中淡入黑色 这是我正在使用的代码 public class NavigationC Mon
  • 计算机重新启动后恢复批处理脚本

    我有一堆运行 Windows 2000 Pro 和 IE 5 0 的旧机器 我想将它们升级到带有 Silverlight 的 IE 6 我从微软的网站下载了 IE6 和 Silverlight 安装程序 幸运的是它们都有命令行选项 允许它们
  • 你能在 C# 中编写一段 C++ 代码吗?

    我听说你可以在 C 代码中直接切换到 C 这是怎么做到的 还是我听错了 注意 我的意思不是 C CLI 你可能会想unsafe blocks您可以在其中编写看起来很像 C 的代码 因为您可以使用指针
  • 如何在 JavaScript 中快速播放声音文件的多个副本

    我正在用 html js 构建一个旋转得相当快的命运之轮 每当一种新的颜色飞过标记时 色轮就会发出咔哒声 在最高速度下 这听起来几乎就像一挺机关枪 因此在旧文件基本上完成之前就开始播放新文件 文件本身始终相同 click wav 它在 Ch
  • 如何在Javascript中使用字符串作为变量名? [复制]

    这个问题在这里已经有答案了 可能的重复 有没有办法使用包含变量名称的字符串来访问 JavaScript 变量 JavaScript 通过名称字符串动态获取局部变量 一个简单的代码来说明我的问题 var chat 1 one var chat
  • 如何理解普通函数和箭头函数中的“this”?

    我想加载远程图像以获取其高度和宽度 但得到不同的结果 下面的代码给了我正确的图像高度和宽度 img onload function console log image this width this height ctx drawImage
  • 绕过“选项请求”的身份验证(因此所有标头都在响应中发送)

    这是在跨源资源共享的背景下 对于预检请求 服务器不会发送标头集 当 选项请求 未传递有效的 cookie 时 其响应中的服务器不会发送我设置的标头 但会发送 200 OK 我用curl检查了这一点 如下所示 显然 我在这里用虚拟的 xyza
  • 替代 SocketUtils.findAvailableTcpPort()?

    以下初始化为套接字spring integration在专用端口上 目标是给应用程序 2 分钟的时间在该端口上运行 否则失败就是不成功 但应用程序启动应该not fail directly该端口在启动时不是空闲的 Configuration
  • WordPress 网站速度慢得令人痛苦

    有哪些工具可以确定网站加载页面的时间如此之长的原因 我正在使用一个非常简单的主题 我对其进行了更改以满足我的需求 这是一个全新的网站 只有两个测试帖子 并且需要一段时间才能加载 我使用 YSlow for Firebug 它为该网站提供了
  • 使用编译 'com.google.android.support:wearable:2.0.4' 时出现以下错误,但我没有使用 26.0.0

    使用时compile com google android support wearable 2 0 4 最新版本com google android support wearable 在我的 Wear 应用程序的 build gradle
  • rgl 矢量图:显示正交向量的直角

    In the matlib包裹 https github com Friendly matlib 我有一个函数 vectors3d 绘制几何矢量图 下面的代码给出了一个显示单位向量 J 的示例图 以及它在 X Y Z 轴上的一些投影 在致电
  • 将模型对象列表发布到 ASP.NET MVC 中的控制器

    像这样的形式 视图模型 public class ProductViewModel public string Product get set public IEnumerable
  • 带有 html5Mode 的 Angular 路线在重新加载后给出“未找到”页面

    我制作了一些 Angular 路线 如下面的代码所示 app config function routeProvider locationProvider provide routeProvider when templateUrl hom
  • chrome 扩展 - ip 域权限

    我的 Chrome 扩展程序需要向我的家庭 LAN 上的服务器发送请求 但我没有 DNS 设置 因此我对所有内容都使用原始 IP 我通过我的后台页面发送这些请求 因此在清单文件中具有适当的权限 它应该允许我这样做 这就是我在清单中的内容 p
  • 如何将时间转换为iPhone设备的时区?

    我在 EST 时区有一个时间 它是使用 mysql 服务器上的 NOW 函数完成的 因为我的服务器位于东部时间 所以存储的时间是东部时间 当我从 iPhone 上的应用程序检索它时 我需要以用户的正确时区显示它 我怎么做 我认为这取决于您所
  • Python isalpha() 和 scandics

    有没有办法让 python isalpha 方法理解 scandics 我已经尝试过以下方法 gt gt gt import locale gt gt gt locale getlocale None None gt gt gt thisi
  • 如何使用 boto 将文件从 Amazon S3 流式传输到 Rackspace Cloudfiles?

    我正在将文件从 S3 复制到 Cloudfiles 并且我想避免将该文件写入磁盘 Python Cloudfiles 库有一个 object stream 调用 看起来正是我所需要的 但我在 boto 中找不到等效的调用 我希望我能够做类似