Javascript Html文件保存-如何克服GET的2K限制。(注意:POST不起作用)
我正在将一个用javascript构建的文件保存到本地internet下载目录 这项工作: javascriptJavascript Html文件保存-如何克服GET的2K限制。(注意:POST不起作用),javascript,php,html,save,Javascript,Php,Html,Save,我正在将一个用javascript构建的文件保存到本地internet下载目录 这项工作: javascript var filename = "mysave.txt" var contents = "xyz"; document.location = "htmlsave.php?filename=" + filename + "&contents=" + contents; htmlsave.php: if(!isset($_GET)) { exit(0); } $filen
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;
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) {
}
});
显然,你需要使用POST,但是如何使用POST呢?如何使用POST数据执行“document.location=”位?你不能做一篇ajax文章(见下文),我已经试过了,但它不起作用
失败的POST方法:
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;
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) {
}
});
那么如何保存大于2K的文件呢?
php
不需要创建,提示用户保存在javascript
创建的文件。您可以使用
元素,将下载
属性设置为文件名
,href
设置为包含文件数据的Blob的对象URL
,以启动提示用户保存文件
如果你想使用php
,你可以使用php://input
,文件获取内容()
,echo
POST
edBlob
或文件
对象
vari;
var filename=“mysave.txt”
var contents=“”;
对于(i=0,contents=“”;我不确定您想要实现什么?我想将一个javascript生成的文件(大于2K)保存到客户端的internet下载目录。您可以不使用php
来实现这一点。这看起来不错,但它将我引向应用商店。首先,它会问,“您想允许此网站在您的计算机上打开应用程序吗?”?然后它将我引导到应用程序商店,寻找可以读取blob的内容。@revend“这看起来不错,但它将我引导到应用程序商店。首先它会问,‘是否允许此网站在您的计算机上打开应用程序’?然后它将我引导到应用程序商店,寻找可以读取blob的内容。”有趣。您使用的是哪种浏览器?Internet Explorer 11是它要求应用商店的地方。Firefox根本不喜欢您的方法,它什么也不做。在Chrome上它工作得非常好。出于兴趣,您如何实现您的php方法?Firefox版本,用户可以在其中单击。如果您发布Blob
或File
object您应该能够使用echo file\u get\u内容(“php://input“”