Python 为什么不是';t boto返回写入S3的字节数?

Python 为什么不是';t boto返回写入S3的字节数?,python,boto,Python,Boto,我正在python脚本中使用boto。在完成所有的设置之后,我试图通过比较磁盘上文件的大小和实际写入S3的字节数来查看是否成功上传到S3 (顺便说一句,如果有更好的方法确认上传成功,我很乐意知道。) 我转到Python命令行,重新生成了我的问题。在连接到S3等之后,我做了以下工作: >>> bytes = os.path.getsize('file.zip') >>> key = bucket.new_key('file.zip') >>>

我正在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
set\u contents\u from\u filename()
函数应返回写入S3的字节数。为什么是


(我使用的是boto 2.8.0,是的,文件存在并且
字节数超过200k…我已检查过。)

我现在不确定为什么文件名中的
set\u contents\u返回的值为None。快速查看一下代码,它至少尝试返回写入的字节数。我必须进行一些测试,看看是否能重现这一点


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

太棒了。我不知道支票是内置的。非常感谢。