AjaxUploadの諸問題と画像プレビュー その2

2011.01.28 Author:

さて、ずいぶんと時間が空いてしまいました。
たとえば掲示板でも何でもよいのですが、画像を投稿したりするシチュエーションがあります。
通常、ファイルをアップロードする場合は、

<input type=="file=" name=="xxxx="...>
とするのが一般的ですね。
ま、いかにもレガシーなやり方です。
どうでもいいですが、社用車はレガシィです…

この方法では、フォームでポストしてもらうまでファイルの中身が分かりません。
そこで、Ajax風にフォーム全体をポストするのではなく、ファイルだけをポストしようという試み(その名もAjaxUpload)というものがあります。
テーマは、AjaxUploadとdataスキームを使って高速なアップロード画像プレビューサービスを実現させてみようです。

まず、AjaxUploadの仕組みです。
Ajaxであれば、フォームのデータを非同期で送ってということが可能で、これが一般的にAjaxと呼ばれる処理なのですが、残念ながらmultipartのデータを送ることができません。
そのため、無理矢理iframeを生成し、iframe内に<input file="">を作ってポストさせることで代用させている場合がほとんど(※)です。
※ ほとんどというのは、一部のライブラリは別方法で回避しているものがあるからですが、ここでは一般的なライブラリのお話にとどめます

仕組みが分かったところで、どのように実現させたいかと言えば、

  • AjaxUploadを使って、ファイルを非同期でアップロード
  • サーバー側で、アップロードファイルを判定
  • 画像であれば、サムネイル作成など必要な処理を行う
  • Ajax通信の戻りにステータスとdataスキームを含ませる
  • ステータスチェックを行い、問題がなければdataスキームをimgタグにあてはめて画像を表示
といったものです。
これだと、通信が1回で簡潔するので、成功すればものすごい高速に画像が表示されるというわけです。

やり方をまとめたところで、実際にやってみると意外にうまくいかないものです。
ファイルのアップロードまでは何ら問題なく行くのですが、戻りの処理が想定とは全く違います。
ということで、次回はこのあたりを説明して完成させましょう!

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ