我在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 ......我查了一下。)
答案 0 :(得分:3)
目前我不确定set_contents_from_filename
为什么返回值为None。快速查看代码表明它至少试图返回写入的字节数。我将不得不进行一些测试,以确定我是否可以重现它。
但是,如果检查字节的目的是尝试验证对S3的写入操作是否成功完成,则已经在boto中内置了更强大的完整性检查。在上传文件之前,计算MD5校验和。这将作为请求中的Content-MD5
标头发送。作为响应,S3发送ETag
标头,其包含在服务端为上载的内容计算的MD5校验和。 Boto会比较这些并在它们不匹配时引发异常。