我有想要写入文件的数据,并打开一个文件对话框供用户选择保存文件的位置。如果它能在所有浏览器中工作就太好了,但它必须在Chrome中工作。我想在客户端完成。
基本上我想知道在这个函数里放什么
saveFile: function(data)
{
}
函数接收数据,让用户选择保存文件的位置,并在该位置用该数据创建一个文件。
如果有帮助的话,使用HTML也很好。
我有想要写入文件的数据,并打开一个文件对话框供用户选择保存文件的位置。如果它能在所有浏览器中工作就太好了,但它必须在Chrome中工作。我想在客户端完成。
基本上我想知道在这个函数里放什么
saveFile: function(data)
{
}
函数接收数据,让用户选择保存文件的位置,并在该位置用该数据创建一个文件。
如果有帮助的话,使用HTML也很好。
当前回答
在控制台中尝试了这一点,并且它可以工作。
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // the blob
window.open(URL.createObjectURL(oMyBlob));
其他回答
对于Chrome和Firefox,我一直使用纯JavaScript方法。
(我的应用程序不能使用Blob.js这样的包,因为它是由一个特殊的引擎提供的:一个DSP和一个WWWeb服务器,几乎没有空间容纳任何东西。)
function FileSave(sourceText, fileIdentity) {
var workElement = document.createElement("a");
if ('download' in workElement) {
workElement.href = "data:" + 'text/plain' + "charset=utf-8," + escape(sourceText);
workElement.setAttribute("download", fileIdentity);
document.body.appendChild(workElement);
var eventMouse = document.createEvent("MouseEvents");
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
workElement.dispatchEvent(eventMouse);
document.body.removeChild(workElement);
} else throw 'File saving not supported for this browser';
}
注释、警告和模棱两可的词语:
I have had success with this code in both Chrome and Firefox clients running in Linux (Maipo) and Windows (7 and 10) environments. However, if sourceText is larger than a MB, Chrome sometimes (only sometimes) gets stuck in its own download without any failure indication; Firefox, so far, has not exhibited this behavior. The cause might be some blob limitation in Chrome. Frankly, I just don't know; if anybody has any ideas how to correct (or at least detect), please post. If the download anomaly occurs, when the Chrome browser is closed, it generates a diagnostic such as This code is not compatible with Edge or Internet Explorer; I have not tried Opera or Safari.
在控制台中尝试了这一点,并且它可以工作。
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // the blob
window.open(URL.createObjectURL(oMyBlob));
你不能单纯地在Javascript中做到这一点。由于安全原因,Javascript在浏览器上运行还没有足够的权限(已经提出了建议)。
相反,我建议使用downadify:
一个微小的javascript + Flash库,可以创建和下载文本文件,无需服务器交互。
您可以在这里看到一个简单的演示,其中提供内容并测试保存/取消/错误处理功能。
对于最新的浏览器,如Chrome,你可以使用本教程中的文件API:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.PERSISTENT, 5*1024*1024 /*5MB*/, saveFile, errorHandler);
function SaveBlobAs(blob, file_name) {
if (typeof navigator.msSaveBlob == "function")
return navigator.msSaveBlob(blob, file_name);
var saver = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
var blobURL = saver.href = URL.createObjectURL(blob),
body = document.body;
saver.download = file_name;
body.appendChild(saver);
saver.dispatchEvent(new MouseEvent("click"));
body.removeChild(saver);
URL.revokeObjectURL(blobURL);
}