前提・実現したいこと
サーバに置いてある2Gまたは2Gを超えるZIPファイルをIE11、Edgeブラウザからダウンロードしたいです。
できない場合は公式または参考になるサイトなど理由が知りたいです。
IEについてはダウンロード容量自体はIE8から制限が無いようです。
Microsoft サポート
Chromeについては2GB、4GBともにダウンロードすることができました。
発生している問題・エラーメッセージ
■IE11 2GのZIPファイルがダウンロードできない ■Edge 2GのZIPファイルはダウンロードできた 4GのZIPファイルをダウンロードしようとすると自動的に画面が更新される
該当のソースコード
javascript
1$(document).on("click", ".download", function(){ 2 showLoading(); // ロード表示 3 4 var filename = "dl_2GB.zip"; 5 var data = {}; 6 data["path"] = "/tmp/dl_2GB.zip"; 7 $.ajax({ 8 type : "POST", 9 url : "check.php", 10 data : data, 11 cache: false, 12 dataType: "json", 13 success : function(obj, dataType) { 14 if(obj.status){ 15 var xhr = new XMLHttpRequest(); 16 var url = 'download.php?&path=' + data["path"]; 17 xhr.open("GET", url, true); 18 xhr.responseType = "blob"; 19 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 20 xhr.onload = function(){ 21 if(this.status == 200){ 22 var blob = xhr.response; 23 if (window.navigator.msSaveBlob){ 24 window.navigator.msSaveBlob(blob, filename); 25 }else{ 26 var objectURL = window.URL.createObjectURL(blob); 27 var link = document.createElement("a"); 28 document.body.appendChild(link); 29 link.href = objectURL; 30 link.download = filename; 31 link.click(); 32 document.body.removeChild(link); 33 window.URL.revokeObjectURL(objectURL); 34 } 35 hideLoading(); // ロード非表示 36 return false; 37 }else{ 38 alert("失敗"); 39 hideLoading(); // ロード非表示 40 } 41 }; 42 xhr.send(null); 43 return false; 44 }else{ 45 alert("失敗"); 46 removeLoading(); // ロード非表示 47 } 48 }, 49 error : function(XMLHttpRequest, textStatus, errorThrown) { 50 alert("失敗"); 51 } 52 }); 53});
php
1header('Content-Type: application/zip'); 2header('Content-Disposition: attachment; filename="' . basename($_GET["path"]) . '"'); 3header('X-Content-Type-Options: nosniff'); 4header('Connection: close'); 5 6while(ob_get_level() > 0){ 7 ob_end_clean(); 8} 9ob_start(); 10 11if($file = fopen($_GET["path"], 'rb')){ 12 while(!feof($file) and (connection_status() == 0)) { 13 echo fread($file, '4096'); 14 ob_flush(); 15 } 16 ob_flush(); 17 fclose($file); 18} 19ob_end_clean(); 20exit;
試したこと
header('Content-Type: application/force-download');
header("Content-Type: application/octet-stream");
header("Cache-Control: public");
header("Pragma: public");
上記の様にヘッダーをIEの場合など、変更や追加をしましたがダメでした。
またPHP側のファイル出力をreadfile()で行っても結果は同じでした。
補足情報(FW/ツールのバージョンなど)
開発環境 ローカルPC
CPU:Intel(R) Core(TM) i7-8700 CPU @ 3.2GHz 3.19 GHz
メモリ:16GB
XAMPP:3.2.3
PHP:5.6.40