gpt4 book ai didi

python-3.x - 将内存中的 HTML 保存到 S3 AWS Python Boto3

转载 作者:行者123 更新时间:2023-12-04 17:22:01 26 4
gpt4 key购买 nike

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
更新:
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 文件,所以我可能会把它留给我自己的 future 引用。也就是说,我仍然不清楚为什么我不能以字符串形式保存 '.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 文档:
put_object

Body=b'bytes'|file,



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

通过将文件句柄传递给 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)

关于python-3.x - 将内存中的 HTML 保存到 S3 AWS Python Boto3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52086739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com