2013-04-04 72 views
3

我在一個python腳本中使用boto。完成所有設置之後,我試着通過比較磁盤上的文件大小和實際寫入S3的字節數來查看上傳到S3是否成功。爲什麼boto沒有返回寫入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 sayset_contents_from_filename()函數應該返回寫入S3的字節數。爲什麼它是None

(我使用博託2.8.0,是的,該文件存在,並且bytes是向上的200K ...我檢查。)

回答

3

我不知道此刻爲什麼set_contents_from_filename返回一個無的價值。快速查看代碼表明它至少試圖返回寫入的字節數。我將不得不運行一些測試,看看我能否重現這一點。

但是,如果檢查字節的目的是試圖驗證對S3的寫入操作是否成功完成,那麼已經有一個強大的完整性檢查內置到boto中。在上傳文件之前,計算MD5的校驗和。這是作爲請求中的Content-MD5標頭髮送的。作爲響應,S3發送一個ETag標題,其中包含在服務端爲上傳的內容計算的MD5校驗和。博託比較這些,並提出一個例外,如果他們不匹配。

+1

太棒了。我沒有意識到這張支票是內置的。謝謝! – Matt 2013-04-04 18:44:52

相關問題