将内存中的 HTML 保存到 S3 AWS Python Boto3

2024-01-17

import boto3
from io import StringIO
s3 = boto3.client('s3')

display = # Altair Charting

buff = StringIO(display.save(str_obj, 'html'))

s3.upload_fileobj(buff.read(), BUCKET, 'index.html')

我认为完整的示例会使问题变得复杂,因此我将 Altair 图表注释掉了。

无论如何,我尝试实施大量将对象和文件保存到 AWS S3 存储桶的建议,但我不理解。

保存到磁盘非常简单:

display.save('index.html')

比较起来,将其放到 S3 上似乎极其困难。我不确定我在这里缺少什么。或许是upload_fileobj不是正确的方法,但我一直在努力使这项工作有效。

该方法的具体错误是ValueError: Fileobj must implement read

UPDATE:

buff = StringIO(display.save('str.html'))

s3.put_object(
   Bucket=BUCKET, 
   Key=f'{DASHBOARD}{mkt_type}/{symbol}/index.html',
   Body=buff.read()
   )

结果为 0 字节文件index.html在我的桶上

更新2:

str_obj = StringIO()
display.save(str_obj, 'html')
buff = str_obj.read()

s3.put_object(
    Bucket=BUCKET, 
    Key=f'{DASHBOARD}{mkt_type}/{symbol}/index.html',
    Body=buff
    )

这也是行不通的。我简直不敢相信将文件保存到 S3 会如此复杂。事后注意:我没有getvalue()所需的方法buff

解决方案: 这不是我第一次与 S3 文件作斗争,所以我可能会将其留给我自己的未来参考。也就是说,我仍然不清楚为什么我无法以字符串形式保存“.html”文件。

import boto3
from io import StringIO
s3 = boto3.client('s3')

display = # Altair Charting

str_obj = StringIO() # instantiate in-memory string object
display.save(str_obj, 'html') # saving to memory string object
buf = str_obj.getvalue().encode() # convert in-memory string to bytes

# Upload as bytes
s3.put_object(
    Bucket=BUCKET, 
    Key=f'{DASHBOARD}{mkt_type}/{symbol}/index.html', 
    Body=buf
    )

来自 boto3 文档:放置对象 https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_object

Body=b'字节'|文件,

这意味着 Body 应该是文件句柄或字节字符串。 所以有(至少)2种可能的上传方式:

通过将文件句柄传递给 Body:

with open('index.hml', 'rb') as f:
    s3.put_object(Bucket=BUCKET, Key=f'{DASHBOARD}{mkt_type}/{symbol}/index.html', Body=f)

通过将字节字符串传递给 Body(假设 display.save() 返回字符串):

buf = display.save('str.html').encode() # converting str to bytes
s3.put_object(Bucket=BUCKET, Key=f'{DASHBOARD}{mkt_type}/{symbol}/index.html', Body=buf)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将内存中的 HTML 保存到 S3 AWS Python Boto3 的相关文章

随机推荐

  • 如何向某人发送我的(已生成的)github 公共 rsa 密钥(发送密钥或 .pub 文件?)

    我刚刚设置Github并生成了我的ssh keys 我需要给我的公众rsa给某人 这样他们就可以允许我访问他们的 git 存储库 我要寄给他们吗 a 我的整个 pub file b 的内容 pub文件 或 c 我登录时看到的密钥Github
  • 我如何 CURL www.google.com - 它不断将我重定向到 .co.uk

    我正在使用 CURL 来检查 URL 是否存在 HEAD 请求 但是当我用www google com 它将我重定向到www google co uk 可能是因为我的服务器位于英国 有什么办法可以阻止这种情况发生吗 我不想删除CURLOPT
  • 应用程序启动时 Membership.GetUser() 返回 null

    我已经实现了我自己的账户资料 https stackoverflow com questions 426609 how to assign profile values类是 ASP net MVC 并且它可以工作 但现在我遇到了一个奇怪的问
  • Google Chart getSelection 没有列属性

    当我使用时 chart getChart getSelection 0 在图表上 来自图表包装器 因此首先是 getChart getSelection 函数返回 只有行属性 但没有列属性 即使我的 图表 是一个表格 单击其中的任意位置都应
  • 如何标准化/减少 mongoDB 中的时间数据?

    我将详细的性能数据存储在 MongoDB 中 每个集合都是一种性能报告 每个文档都是阵列上端口在该时间点的测量结果 DateTime ISODate 2012 09 28T15 51 03 671Z array serial 12345 P
  • 测量 MKMapView 中绘制路线的距离(以米为单位)

    如何计算MKMapView中两个坐标之间的路线距离 我不是要求直线距离 而是要求转弯路线的距离 我假设你正在使用MKDirectionsRequest得到一个MKDirectionsResponse您从中获取路线 例如 MKDirectio
  • 如何在 JavaScript 中实现“onVisible”事件?

    是否有任何技术或一组技术可以用来实现实际上的onVisibleJavaScript 中的 事件 我希望我的 JavaScript 能够检测到当用户向下滚动页面时网页中的元素 例如一段文本或图像 何时在浏览器窗口中变得可见 我也想要一个相应的
  • 我无法安装 Docker,因为 containerd.io 没有安装候选

    我尝试在 Kubuntu 19 10 上安装 Docker 我使用以下步骤进行安装 https docs docker com install linux docker ce ubuntu https docs docker com ins
  • 当子div浮动时,父div失去自动高度

    我有一个名为 main 的父 div 它里面有一堆子div 我向左或向右浮动 当我完成最后一个浮动后 主 div 的高度完全消失 破坏了页面的布局 我给它的高度 100 就目前而言 但对于大多数分辨率来说它会过高 如何将其保持在流体高度 仅
  • 使用opencv复制/混合不同尺寸的图像

    我正在尝试混合两个图像 如果它们具有相同的大小 则很容易 但如果其中一张图像较小或较大 则 cv addWeighted 会失败 图A 预计更大 图B 预计较小 我试图创建一个 ROI 尝试创建 A 大小的第三个图像并将 B 复制到里面 我
  • spring data couchbase中的id是如何自动生成的?

    我想在 spring data couchbase 中为我的文档创建 ID 自动生成 Spring 文档对此有步骤 https docs spring io spring data couchbase docs current refere
  • 在 Laravel 查询生成器中进行投射

    我想要castLaravel 查询生成器中的 orderBy 因为我的price is varchar type 所以当它排序时 结果离我想要的很远 我的脚本是这样的 DB table test gt where gt orderBy pr
  • 如何在javascript中组合数组

    您好 我想根据数组中的唯一项合并数组 我拥有的对象 totalCells 在这个totalCells数组中我有几个像这样的对象 totalCells cellwidth 15 552999999999999 lineNumber 1 cel
  • 如何在选项卡关闭时删除 jquery cookie

    我的 cookie 工作正常 我没有提及日期 因此当浏览器窗口关闭时 cookie 就会被删除 但是当我关闭浏览器窗口中的选项卡时 cookie 不会被删除 并且当我打开网站时会打开相同的保留的 cookie 状态页面 当用户关闭浏览器选项
  • Java,循环结果集

    在Java中 我有一个这样的查询 String querystring1 SELECT rlink id COUNT FROM dbo Locate GROUP BY rlink id 表 rlink id 有以下数据 Sid lid 3
  • 迭代WPF Datagrid中的所有单元格[重复]

    这个问题在这里已经有答案了 可能的重复 WPF DataGrid 如何在 DataGrid 中迭代以获取行和列 https stackoverflow com questions 1295023 wpf datagrid how do yo
  • Tailwind css,如何设置默认字体颜色?

    我在我的项目中使用 tailwind css 由于我们的应用程序样式 我们使用默认字体颜色 但是我似乎找不到如何在 tailwind 中执行此操作 文档 https tailwindcss com docs text color页面只讨论了
  • Prolog 是否有像 Common Lisp 一样的条件和重启系统?

    Common Lisp 允许异常处理条件并重新启动 http www gigamonkeys com book beyond exception handling conditions and restarts html 粗略地说 当函数抛
  • 解析线性方程的系数

    在java中 我试图找到线性方程的系数 以在我的计算器应用程序中找到线性方程的解 例如 3x 2 6x 3 2 4x 我渴望得到的是 x 的系数和形式的常数ax b 0 在这个特定的例子中 coefficient 19 constant 8
  • 将内存中的 HTML 保存到 S3 AWS Python Boto3

    import boto3 from io import StringIO s3 boto3 client s3 display Altair Charting buff StringIO display save str obj html