モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

IE8でアップロードに失敗する問題

とあるWebアプリでIE8からだとアップロードが出来ない、という相談を受けました。
javascriptというかjQueryを利用して、ajaxでファイルをアップロード出来るのですが、IE8だと動かないというものです。


javascriptのソースを調べてみると、FormDataというクラスが利用されており、これはいわゆるHTML5なクラスのため、IE9以前だと使えないということがわかりました。

IE9以前でこういう用途の場合だとiframeを使って送る手法で実現するようです。


IE9以前でもアップロード行えるようにするjQueryプラグインは以下のようなものがありました。

今回自分は、よりシンプルな jquery.upload.js をベースに修正して利用したのですが、最近はメンテされていないようなので、jQuery File Upload を使ったほうが良いと思います。
FormDataが利用可能な環境かを判定し、利用可能な場合はjquery.upload.jsのuploadを利用し、それ以外のモダンなブラウザなら通常のajaxを使ってアップロードするようにしてみました。


とりあえずこれで動くようになったのですが、受け側のサーバで一部問題が起きました。
元々のソースはcontent-typeを見てファイル種を判断していたのですが、このiframeを使って送る手法だとcontent-typeがうまく送られないようで、その判定でエラーになってしまいました。
そこで送られてきたファイル名の拡張子を見て判断するように変更して回避しました。


この件を色々調べていると、IE9以前でのファイルアップロードは他にもいろんな理由で問題が起きるようです。