Python 为什么不是';t boto返回写入S3的字节数?
我正在python脚本中使用boto。在完成所有的设置之后,我试图通过比较磁盘上文件的大小和实际写入S3的字节数来查看是否成功上传到S3 (顺便说一句,如果有更好的方法确认上传成功,我很乐意知道。) 我转到Python命令行,重新生成了我的问题。在连接到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') >>>
>>> 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将这些进行比较,如果它们不匹配,则引发异常。太棒了。我不知道支票是内置的。非常感谢。