IE10での「をダウンロードできませんでした。」の問題ですが無事解決しました。
※サンプルあり、多分IE11も同様の対応でOKだと思います
昔作成したプログラムでファイルダウンロードが失敗すると連絡を受けて調査しました。
開発環境で再現させてみても全く問題なしで再現しません・・・
サーバー環境が原因か?
それともクライアント環境が原因?
ググってみても「これだ」と思う原因は無し。
そうなるとローラー作戦で調査するしかない。
プログラムがバグってると仮定して、
色々なダウンロードファイルを用意してテスト。
そうすると、法則が見えてきましたよ。
ファイルサイズでね。
どうも、ある一定のファイルサイズを超えると<「ファイル」をダウンロードできませんでした。>が表示される。
そうなれば、あとはググって問題解決へ一直線。
【原因】
要約するとIE10以降色々な処理が非同期になってる。
なので、ファイルサイズが小さい場合、非同期の処理(ダウンロード完了画面)までに本当にダウンロード完了となっている。
ファイルサイズが大きい場合、非同期の処理(ダウンロード完了画面)が始まり、ダウンロードが打ち切られる。
上記原因で<「ファイル」をダウンロードできませんでした。>が表示される。
【対応方法】
対応は、2案ある
1案目:「Response」でファイルサイズを記載する(メソッド忘れた)
2案目:「Response.Close()」を「Response.End()」に変更する
【2案目サンプル】
<修正前>
With Response
.ContentType = “application/octet-stream”
.AddHeader(“Cache-Control”, “public”)
.AddHeader(“Pragma”, “public”)
.AddHeader(“Content-Disposition”, “attachment; filename=” + ファイル名)
.WriteFile(パス名)
.Flush()
.Close()
End With
<修正後>
With Response
.ContentType = “application/octet-stream”
.AddHeader(“Cache-Control”, “public”)
.AddHeader(“Pragma”, “public”)
.AddHeader(“Content-Disposition”, “attachment; filename=” + ファイル名)
.WriteFile(パス名)
.Flush()
.End()
End With
2案目を採用して問題解決!!
無事ファイルをダウンロードできました。
もちろん、中身もOKでしたよ。