为什么boto不返回写入S3的字节数?

时间:2013-04-04 17:43:59

标签: python boto

我在python脚本中使用boto。完成所有设置后,我试图通过比较磁盘上文件的大小和实际写入S3的字节数来查看上传到S3是否成功。

(顺便说一句,如果有更好的方法来确认上传成功,我很乐意知道。)

我下载到Python命令行并重新产生了我的问题。在连接到S3等之后,我做了这个:

>>> bytes = os.path.getsize('file.zip')
>>> key = bucket.new_key('file.zip')
>>> bytesWritten = key.set_contents_from_filename('file.zip')
>>> bytesWritten is None
True

The docs say set_contents_from_filename()函数应该返回写入S3的字节数。为什么是None

(我使用boto 2.8.0,是的,文件存在,bytes超过200k ......我查了一下。)

1 个答案:

答案 0 :(得分:3)

目前我不确定set_contents_from_filename为什么返回值为None。快速查看代码表明它至少试图返回写入的字节数。我将不得不进行一些测试,以确定我是否可以重现它。

但是,如果检查字节的目的是尝试验证对S3的写入操作是否成功完成,则已经在boto中内置了更强大的完整性检查。在上传文件之前,计算MD5校验和。这将作为请求中的Content-MD5标头发送。作为响应,S3发送ETag标头,其包含在服务端为上载的内容计算的MD5校验和。 Boto会比较这些并在它们不匹配时引发异常。