Sphereとともに

scalaとかplayframeworkとか。技術ブログにしたいなと。環境は Windows7x64, mac です。たまに声優さん情報が混ざります。最近ちょっとClojure触りました。

AWS S3 uploadでドハマリしたお話

使用ライブラリ

事象

1ファイル目のファイルアップロードは成功するが、2ファイル目以降でMD5が合わないと言われてアップロードに失敗する。 ログを出力して確認してみると、2ファイル目以降のMD5の値がすべて同じ値になっている。

実装

foreachで回してファイルをアップロードする処理を書いていたが、MD5はライブラリ側で計算して出してくれるとあったので特別なにかを設定するようなことはしていない。

val objectMetadata = createObjectMetadata()
uploadTargetfiles.foreach(file => {
  val putObjectRequest = new PutObjectRequest(bucket.name, file.getName, file) {
    this.setMetadata(objectMetadata)
  }

  client.putObject(putObjectRequest)
})
private def createObjectMetadata(): ObjectMetadata = {
    new ObjectMetadata {
      // ゴニョゴニョ
    }
  }

解決方法

val objectMetadata = createObjectMetadata() をforeachの中に入れた。

原因

foreachの外でobjectMetaDataの定義をしていたのが原因っぽい が、よくわからない

誰かおしえてください。