fotolife 一括アップロード Bookmarklet の覚書

64bit 版の Firefox では、FotolifeFlash を使う一括アップロードが動かない。
なので、こんな Bookmarklet を書いてみた。
フォトライフ一括アップロード - Hatena::Let

やっつけ感が満載なので、未来のぼくに向けてメモ書きを。

一度に送れる画像は 10枚まで

form のソースを見ると画像はこんな感じの <input> で送信される。

<input name="image1" type="file">

name の末尾の数字を変えて送ってみると、通し番号じゃなくても、10 までなら正しく動作する。
アップロードページでは五個なのに、何故、十個まで受け付けるのかは不明。

同時に送信すると、うまくアップロードできない

どうせ XMLHttpRequest で送るなら非同期デフォルトなので、と、ドカドカ送ってみると、一連の送信の最後のやつしか正しく保存できてない。
分割して送るにしても、ひとつ前の処理が終わるのを待ってから送らないとダメみたいだ。

<input type="file"> を削除しても、INPUT.files は活きている

<form> が囲ってる範囲が広いので、レイアウトを崩さないように、送信する画像を指定する multiple な <input type="file"> を name を指定せずに form の中に入れた。
きちんと確認していないけど、name がないパラメータも送信の対象になっている気がする。
画像のサイズ次第だけど、10個の制限を突破するような数の画像を送ると、やっぱりそれなりに遅い。
なので、アップロード用の <input type="file"> を form から削除した後に、その form を指定して FormData を作成する。

document から切り離された INPUT.files だけれど、中身は活きている。

files[k].name をタイトルに設定するモード

似たような見た目の画像を 20個ほどまとめてアップロードするかもしれない。
ローカルでつけたファイル名が fotolife で見られると、アップロードしたファイルの区別がつきやすい。
こんな用途。

302 Moved

アップロードのレスポンスは、302 Moved で返ってきて、そのフォルダの編集ページに飛ばされる。
XMLHttpRequest でリクエストを飛ばすと、見ているページは当然遷移しないので、自前で location を変更してページ遷移する。

もったいないのが、画像の読み込みはしないにしても編集ページがそれなりに重たいこと。
302 の応答を再リクエストするのを阻止できれば良いのだけれど、アドオンとして書かないと無理っぽい。
http://stackoverflow.com/questions/7524039/problems-with-xmlhttprequest-status-302

# あれ、このメソッドだったかな……