Amazon S3への画像アップロードツールをphpで作ってみた

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

今回の成果物はこちら

https://github.com/mynet-inc/s3-deploy-tool

このプログラムを作った背景

「ゲームで使う大量の画像ファイルをS3にアップロードしたい」

―― はい

「しかし量が多すぎてめちゃくちゃ時間がかかる」

―― 今日も残業ですね

「水曜日の残業は今年から禁止された」

―― 特別残業申請出しましょうか?

「まて、まだ希望はある」

―― 冗談ですよ

「追加があるたびに全部アップロードするのをまずやめよう」

―― それもそうですね

「そこで差分の判定にmd5を使う」

―― 常套手段ですね

「画像ファイル自体はsubversionで管理されているから、.svn等の隠しフォルダ以下は除外したい」

―― あっ、Thumbs.db をコミットしてしまいました

「おいやめろ!!」

―― この .DS_Store というファイルはなんでしょう?

「それもアップロードしちゃいかん」

―― そういえばモンハンクロス買いましたよ

「関係ない話はあとでやれ。あとそのDSじゃない。」

―― 結局どのような実装になったのでしょうか

「まず、S3にファイルをアップロードするのが一番重い。一方でダウンロードはわりと速い。」

―― S3そういう設計ですからね

「まずローカルでmd5値を計算して、別途ファイルに保存する。2回目以降ではオリジナルファイルとmd5ファイルの更新タイムスタンプを比較して、オリジナルのほうが新しければmd5を計算しなおす。md5が一致しなければ更新されたと判定する。」

―― makeのパクりですね

「全くその通りだ。」

―― その他の工夫は?

「md5ファイルはS3にも一緒にアップロードする。ローカルのディスクがぶっ壊れることなど日常茶飯事だからだ。」

―― なるほど

「これで必要最低限の時間だけでアップロードが完了する」

―― 便利ですね

「あとはアップロード確認ツールから画像を見比べてデプロイ作業は完了だ」

―― オチはどうしましょうか?

「心配ない。不具合を作りこんでおいた。」

この投稿は マイネット Advent Calendar 201516日目の記事です。