python - 如何将base64编码的字符串上传到s3并在python中访问html文件中的url

标签 python amazon-s3 boto

我有一个 base64 字符串。这个字符串是 base64 相当于图像。现在这个文件应该上传到 S3 并且应该直接在我的浏览器或 html 文件中使用 s3 url 访问。 我尝试了几种方法,但无法在浏览器中打开图像,它只是下载到我的盒子中。

方法一: 使用 botoS3 方法 set_contents_from_string

方法二: 将 base64 转换为 StringIO 并使用 set_contents_from_file

方法三: 将 base64 保存到临时文件,然后使用方法 set_contents_from_file。

我使用的所有上述方法只是在我的浏览器中下载文件,他们没有将其识别为图像

最佳答案

set_contents_from_string(base64.b64decode(data))为我工作

完整代码

import boto
from boto.s3.connection import S3Connection
from boto.s3.key import Key
# import urllib
# from io import BytesIO
AWS_ACCESS_KEY = os.environ.get('AWS_ACCESS_KEY') 
AWS_SECRET_KEY = os.environ.get('AWS_SECRET_KEY')
AWS_BUCKET_NAME = os.environ.get('S3_BUCKET_NAME')
import base64

我在 django View 中执行此操作,因此我读入了 base64 数据并将其分配给一个名为 cover_art 的变量。 然后我像这样将它保存到 S3:

connection = boto.connect_s3()
bucket = connection.get_bucket(AWS_BUCKET_NAME)
cloudfile = Key(bucket)
path = "images/" + me.username + "/" + "cover-image-001.jpg"
cloudfile.key = path
cloudfile.set_contents_from_string(base64.b64decode(cover_art))
cloudfile.set_metadata('Content-Type', 'image/jpeg') # from https://stackoverflow.com/a/22730676 and https://stackoverflow.com/questions/16156062/using-amazon-s3-boto-library-how-can-i-get-the-url-of-a-saved-key
cloudfile.set_acl('public-read')

额外评论

几个小时前我对 base64 编码还很陌生,所以我什至不确定我应该使用 boto 来做什么。以防万一您向 boto 输入了错误的内容,这里有一个关于我使用的变量“cover_art”的额外注释。

假设数据如下所示:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFR...

例如,如果我想显示这样的图像,这就是我需要放入网页的内容

<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFR...">

但是,在 python 代码中,我向 boto 提供的一点是没有介绍。所以我的变量看起来像这样:

cover_art = "/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFR..."

我实际上是从一个看起来像的表单中收集它的

<input name="cover_art" type="hidden" value="/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQV...">

(如果您也在使用表单并希望在提交时在浏览器中检查它,请尝试使用 javascript 抓取表单然后显示它,例如 alert(theForm.innerHTML) )

请注意,没有有趣的角色,它看起来不像 ÿØÿà...

(希望你能从我使用的语言中看出我是一个 n00b!)

顺便说一句,我发布这个是因为出于某种原因我无法让 set_contents_from_file(file_obj) 方法为我工作...不过感谢您发布您的答案,很高兴看到该方法为你工作。

关于python - 如何将base64编码的字符串上传到s3并在python中访问html文件中的url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730051/

相关文章:

python - 断管错误 selenium webdriver,当命令之间存在间隙时?

c# - 如何在进度条中显示文件上传进度 - Amazon S3 bucket

python - 是否可以在消息不可见时从 SQS 检索消息?

python - 如何通过 AWS Jupyter Notebook 查询 (Postgres) RDS 数据库?

java - 如何使用java通过对象名称打印类的属性?

python - 在 Windows 上编写 CSV

python - boto3 中 boto.exception.BotoServerError 的等价物是什么

amazon-s3 - 使用 LAMBDA 函数从 S3 到 Dynamodb 的 csv 文件

web-applications - 为用户上传的图像创建唯一的文件名(哈希)

python - Boto 2.6 CloudSearch "No module named requests"错误