AJAXでファイルアップロードのプログレスバーってどうやって出す
ASP.NET向けのコンポーネントでこんなの見つけた。
http://darrenjohnstone.net/2008/07/15/aspnet-file-upload-module-version-2-beta-1/
なんで?なんでAJAXでプログレスバー出せるの?ってすごい疑問だったのでコード読んでみた。たぶんこんな感じで実現してるんだと思う。
- ページには普通にinput type="file"タグが置かれている
- ファイル選択もinputタグの機能そのまま
- uploadボタンをクリックすると、非同期PostBackする
- アップロード先のサーバ側ではIHttpModuleを自前で実装して生のhttprequestをフックしていて、requestを読み込むごとにアップロードサイズを記録する
- クライアント側では非同期PostBack後、Webサービスを定期的に呼び出し、4.で保持されている送信サイズを教えてもらう
- 非同期PostBackのRequest送信が完了するまで5.の状態
- 非同期PostBackを受けたページは、Loadイベントとかが普通に順次呼ばれて、カスタムコントロールからアップロードしたファイルが取得できる
なるほど〜…こんなことやってたのか。