AJAXでファイルアップロードのプログレスバーってどうやって出す

ASP.NET向けのコンポーネントでこんなの見つけた。
http://darrenjohnstone.net/2008/07/15/aspnet-file-upload-module-version-2-beta-1/


なんで?なんでAJAXプログレスバー出せるの?ってすごい疑問だったのでコード読んでみた。たぶんこんな感じで実現してるんだと思う。

  1. ページには普通にinput type="file"タグが置かれている
  2. ファイル選択もinputタグの機能そのまま
  3. uploadボタンをクリックすると、非同期PostBackする
  4. アップロード先のサーバ側ではIHttpModuleを自前で実装して生のhttprequestをフックしていて、requestを読み込むごとにアップロードサイズを記録する
  5. クライアント側では非同期PostBack後、Webサービスを定期的に呼び出し、4.で保持されている送信サイズを教えてもらう
  6. 非同期PostBackのRequest送信が完了するまで5.の状態
  7. 非同期PostBackを受けたページは、Loadイベントとかが普通に順次呼ばれて、カスタムコントロールからアップロードしたファイルが取得できる


なるほど〜…こんなことやってたのか。