如何使用 Content-MD5 将对象放入 s3

2023-11-21

我尝试使用 boto3 将 XML 文件上传到 S3。根据亚马逊的建议,我想发送数据的 Base64 编码 MD5-128 位摘要(Content-MD5)。

https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Object.put

My Code:

with open(file, 'rb') as tempfile:
   body = tempfile.read()
tempfile.close()

hash_object = hashlib.md5(body)
base64_md5 = base64.encodebytes(hash_object.digest())

response = s3.Object(self.bucket, self.key + file).put(
            Body=body.decode(self.encoding),
            ACL='private',
            Metadata=metadata,
            ContentType=self.content_type,
            ContentEncoding=self.encoding,
            ContentMD5=str(base64_md5)
        )

当我尝试这个时, str(base64_md5) 创建一个像 'b'ZpL06Osuws3qFQJ8ktdBOw==\n'' 的字符串

在这种情况下,我收到此错误消息:

An error occurred (InvalidDigest) when calling the PutObject operation: The Content-MD5 you specified was invalid.

出于测试目的,我仅复制了前面没有“b”的值:“ZpL06Osuws3qFQJ8ktdBOw==\n”

然后我收到此错误消息:

botocore.exceptions.HTTPClientError: An HTTP Client raised and unhandled exception: Invalid header value b'hvUe19qHj7rMbwOWVPEv6Q==\n'

谁能帮我如何将上传文件保存到 S3?

Thanks,

Oliver


从 @Isaac Fife 的示例开始,将其剥离以识别需要什么与不需要什么,并包含导入等以使其成为完整的可重现的例子:

(您需要做的唯一更改是使用您自己的存储桶名称)

import base64
import hashlib
import boto3

contents = "hello world!"
md = hashlib.md5(contents.encode('utf-8')).digest()
contents_md5 = base64.b64encode(md).decode('utf-8')

boto3.client('s3').put_object(
  Bucket="mybucket",
  Key="test",
  Body=contents,
  ContentMD5=contents_md5
)

经验教训:首先,您尝试生成的 MD5 不会像“上传”返回的那样。我们实际上需要一个base64版本,它返回一个md.hexdigest()版本。十六进制是base16,不是base64。

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

如何使用 Content-MD5 将对象放入 s3 的相关文章

  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • PySpark groupByKey 返回 pyspark.resultiterable.ResultIterable

    我试图找出为什么我的 groupByKey 返回以下内容 0
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 如何使用 Docker for Mac 向 docker awslogs 驱动程序提供凭证?

    我正在尝试使用泊坞窗awslogs 驱动程序 https docs docker com engine admin logging awslogs 并收到以下错误 docker 来自守护程序的错误响应 无法初始化日志记录 驱动程序 NoCr
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • 正则表达式中需要插入符号(^)和美元符号($)吗?

    我最近读过有关 JavaScript 正则表达式的内容 但我很困惑 作者说有必要包含插入符号 和美元符号 位于所有正则表达式声明的开头和结尾 为什么需要它们 Javascript RegExp 允许您指定多行模式 m 这会改变 and 代表
  • 正则表达式分割骆驼大小写

    我在 JavaScript 中有一个正则表达式 可以使用以下代码 我随后从here MyCamelCaseString replace A Z g 1 replace function str return str toUpperCase
  • JSONP 与 IFrame?

    很快我将需要构建一个小部件 我们的一些客户可以将其嵌入到他们自己的网站中 为了将来证明我的小部件 嵌入代码将如下所示 div div iframe 与 JSONP 相比有何优缺点 iframe 是否存在常见的基于 SEO 的问题 首先 if
  • 使用 R 计算数组中出现的频率

    我有一个数组 a lt c 1 1 1 1 1 2 3 4 5 5 5 5 5 6 7 7 7 7 我想使用一些命令来告诉我数组中最常见的数字是哪个 有一个简单的命令吗 The table 函数足以满足这一点 如果您的数据有多个 则特别有用
  • 当鼠标悬停在 QPushButton 上时,如何从 QPushButton 发出信号?

    最近 我想要那个QPushButton当鼠标指针进入时可以发出信号 我怎样才能做到呢 我知道 QPushButton 有一些已经定义的信号 例如clicked pressed destory 等等 但没有像悬停 输入 这样的信号 我查了一些
  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件 (OSX)

    我正在寻找用一些代码修补一个废弃软件 该软件是基于碳的 所以我不能使用InputManager 至少 我不认为我可以 我的想法是向 mach o 标头添加 dylib 引用 并在调用初始化例程时启动一个新线程 我使用十六进制编辑器修改了 m
  • 如果连接到未更改的存储,React componentDidUpdate 方法不会在继承的 props 更改时触发

    我希望我的组件知道某些库是否已加载 要知道 从任何上下文我都将其连接到我的商店的 库 减速器到我的组件 我还向它传递了一个配置对象this props dataObject来自调用该组件的父级 像这样 class GoogleButton
  • 对 pthread CLion 的未定义引用

    我正在尝试在 CLion 中运行这个简单的线程 C 程序 include
  • Lucene 5.0 中按字母顺序对字符串字段进行排序

    我在 Lucene 5 0 中对字符串字段进行排序时遇到问题 显然 自 Lucene 4 以来排序的方式已经改变 下面显示了正在为我的文档建立索引的一些字段的片段 Override public Document generateDocum
  • 使用 Linq 重叠两个日期之间的记录

    在我的应用程序中 用户可以委托另一个用户批准订单 我需要验证的是 没有循环引用 所以如果User A是已委托User B在一定时期内 User B不能委托User A对于该期间内的任何时间 即存在重叠 日期dd mm yyyy Delega
  • 如何从 Java 密钥库中的证书链中仅删除一个证书

    我有一个 Tomcat 服务器 其 HTTPS 证书链存储在 Java 密钥库中 该链包含自签名根 CA 证书 虽然这显然没问题TLS 规范 一些验证服务对此发出警告 并且最好还是把它关掉 如何编辑密钥库以仅删除自签名根 CA 证书 但保持
  • 如何将模块路径添加到python?

    我尝试构建 V8 javascript 引擎 当我尝试调用命令时python build git v8 我收到错误 File build gyp v8 line 48 in lt module gt import gyp ImportErr
  • webrtc和peerjs:如何选择H264而不是vp8?

    我确实使用peerjshttps peerjs com在 2 个对等点之间建立连接 有没有办法强制使用 H264 代码而不是 VP8 Regards Update 您可以使用设置编解码器首选项一旦浏览器支持 即可达到相同的结果 旧答案 您必
  • Perl:具有共享多维哈希的线程

    我正在尝试在多个线程上共享多维哈希 这个哈希保存了2个连接的密钥对 我需要知道它们是否已经连接 如果没有 我需要连接它们 如果没有 则不需要去数据库 use threads use threads shared my FLUobject2p
  • jquery getJSON函数计时问题

    我认为我的程序正在跳过 JSON 调用的结果 是否可以在此处创建一个闭包函数或让程序等待 JSON 调用返回 function username not duplicate username var function name get us
  • 我可以将图像转换为 CSS3 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 假设我有一个像这样的多边形图像PNG文件 没有边框 形状填充一种颜色 没有渐变 图像背景是透明的 http www enchantedlearnin
  • 拖放后将 RecyclerView 项存储在 SQLite 中的新位置

    我有一个二维ArrayList类型的String这是适配器类的输入RecyclerView 列表中的数据每次都从 SQLite 数据库中获取onResume 叫做 我已经实现了拖放功能和onMove 成功交换列表元素的函数 但是 我需要先存
  • CKEditor 5 显示视频元素,但插入 div 中的纯 HTML 不显示该元素

    我正在创建一个课程编辑器 用户可以编辑内容 文本 视频 链接 图像等 或查看最终结果 渲染的 html 编辑器工作正常 但是当我显示渲染的 html 时 链接的 YouTube 视频不可见 这是编辑器部分 您可以看到链接的视频可见 这是 渲
  • Mathematica 中 == 和 === 的区别

    我的印象是 是一个作业 是数字比较 并且 是一个符号比较 以及在其他一些语言中 being equal to and being identical to 然而 看看下面的内容 情况似乎不一定如此 In x x Out True In x
  • 如何使用 Content-MD5 将对象放入 s3

    我尝试使用 boto3 将 XML 文件上传到 S3 根据亚马逊的建议 我想发送数据的 Base64 编码 MD5 128 位摘要 Content MD5 https docs aws amazon com AmazonS3 latest