3

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_contents_from_filename()関数は S3 に書き込まれたバイト数を返す必要があります。なぜNoneですか?

(私はboto 2.8.0を使用しています。はい、ファイルが存在しbytes、200k以上あります...チェックしました。)

4

1 に答える 1

3

set_contents_from_filenameなぜNoneの値を返すのか、現時点ではわかりません。コードをざっと見てみると、少なくとも書き込まれたバイト数を返そうとしていることがわかります。それを再現できるかどうかを確認するために、いくつかのテストを実行する必要があります。

ただし、バイトをチェックする目的が、S3 への書き込み操作が正常に完了したことを確認することである場合、はるかに強力な整合性チェックがすでに boto に組み込まれています。ファイルをアップロードする前に、の MD5 チェックサムが計算されます。これはContent-MD5、リクエストのヘッダーとして送信されます。それに応じて、S3ETagは、アップロードされたコンテンツのサービス側で計算された MD5 チェックサムを含むヘッダーを送信します。Boto はこれらを比較し、一致しない場合は例外を発生させます。

于 2013-04-04T18:16:01.063 に答える