Html File Save – Как преодолеть ограничение 2K для GET. (Примечание: POST не работает)

Я сохраняю файл, созданный в javascript, в каталог локальных интернет-каталогов.

Это работает:

Javascript

var filename = "mysave.txt" var contents = "xyz"; document.location = "htmlsave.php?filename=" + filename + "&contents=" + contents; 

htmlsave.php:

 if(!isset($_GET)) { exit(0); } $filename = $_GET['filename']; $contents = $_GET['contents']; header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private", false); // required for certain browsers header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $filename . "\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . strlen($contents)); header("Connection: close"); echo $contents; 

Это не означает:

JavaScript:

 var i; var filename = "mysave.txt" var contents = ""; for(i=0, contents = "";i<10000;i++){ contents += "x"; } document.location = "htmlsave.php?filename=" + filename + "&contents=" + contents; 

Это явно не работает из-за ограничения 2K на URL.

Ошибка:

 Request-URI Too Long The requested URL's length exceeds the capacity limit for this server. 

Очевидно, вам нужно использовать POST, но как вы это делаете с помощью POST? Как вы выполняете бит document.location = с данными POST? Вы не можете сделать ajax POST (см. Ниже), я пробовал, и он не работает.

Сбой метода POST:

JavaScript:

 var filename = "mysave.txt" var contents = ""; for(i=0, contents = "";i<10000;i++){ contents += "x"; } dataARR = { filename: filename, contents: contents }; var dataJSON = JSON.stringify(dataARR); $.ajax({ type: "POST", // This for array url: "htmlsave.php", async: true, cache: false, crossDomain: false, // This needs to be true for other people data: { myJson: dataJSON }, success: function (data) { }, error: function (XMLHttpRequest, textStatus, errorThrown) { } }); 

htmlsave.php

 if(!isset($_POST) || !isset($_POST['myJson'])) { exit(0); } $dataTotal = json_decode($_POST['myJson'], true); $filename = $dataTotal['filename']; $contents = $dataTotal['contents']; header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private", false); // required for certain browsers header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $filename . "\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . strlen($contents)); header("Connection: close"); echo $contents; 

Итак, что я могу сделать, чтобы сохранить файлы размером более 2K?

Related of "Html File Save – Как преодолеть ограничение 2K для GET. (Примечание: POST не работает)"

php не требуется для создания, подскажите пользователю сохранить файл, созданный в javascript . Вы можете использовать элемент <a> с атрибутом download установленным в filename , href установленным в objectURL из Blob содержащим данные файла, чтобы инициировать запрос для сохранения файла пользователем.

Если вы хотите использовать php вы можете использовать php://input , file_get_contents() , echo POST ed Blob или File object.

 var i; var filename = "mysave.txt" var contents = ""; for(i=0, contents = "";i<10000;i++){ contents += "x"; } var data = new Blob([contents], {type:"text/plain"}); var file = URL.createObjectURL(data); var a = document.createElement("a"); a.download = filename; a.href = file; a.click();