Ich speichere eine Datei, die in Javascript erstellt wurde, in das lokale Verzeichnis für Internet-Downloads.Html File Save - Wie man die 2K Grenze auf GET zu überwinden. (Hinweis: POST funktioniert nicht)
Dies funktioniert:
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;
Dies gilt nicht:
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;
Dies funktioniert offensichtlich nicht wegen der 2K Grenze auf der URL.
Der Fehler ist:
Request-URI Too Long
The requested URL's length exceeds the capacity limit for this server.
Natürlich müssen Sie POST verwenden, aber wie wollen Sie tun es mit POST? Wie machst du das 'document.location =' Bit mit POST-Daten? Du kannst keinen Ajax-POST machen (siehe unten), ich habe es versucht und es funktioniert nicht.
Die gescheiterte POST-Methode:
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;
Also, was kann ich tun, Dateien speichern mehr als 2K?
enthalten sein Nicht sicher, was Sie versuchen zu erreichen? – guest271314
Ich möchte eine Javascript-Datei, größer als 2K, im Downloadverzeichnis des Clients speichern. – Rewind
Sie können dies erreichen, ohne 'php' zu verwenden – guest271314