我想知道我是否可以创建一个文本文件并使用 Javascript 将该文件保存在他/她计算机的用户“下载”部分中。我的功能应该工作的方式是当用户单击提交按钮时,我在文本文件中填充用户信息,然后将其保存在他的机器中。我希望它在谷歌浏览器中工作。
这可能吗?我看过一些帖子,专门告诉我这是一个严重的安全问题。
我想知道我是否可以创建一个文本文件并使用 Javascript 将该文件保存在他/她计算机的用户“下载”部分中。我的功能应该工作的方式是当用户单击提交按钮时,我在文本文件中填充用户信息,然后将其保存在他的机器中。我希望它在谷歌浏览器中工作。
这可能吗?我看过一些帖子,专门告诉我这是一个严重的安全问题。
当然可以,使用全新的 API。
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
fs.root.getFile('test.bin', {create: true}, function(fileEntry) { // test.bin is filename
fileEntry.createWriter(function(fileWriter) {
var arr = new Uint8Array(3); // data length
arr[0] = 97; // byte data; these are codes for 'abc'
arr[1] = 98;
arr[2] = 99;
var blob = new Blob([arr]);
fileWriter.addEventListener("writeend", function() {
// navigate to file, will download
location.href = fileEntry.toURL();
}, false);
fileWriter.write(blob);
}, function() {});
}, function() {});
}, function() {});
在 Chrome 浏览器中输入这个
data:text;charset=utf-8,helloWorld
因此,要为您的用户构建下载,您可以执行以下操作
data='<a href='data:text;charset=utf-8,'+uriEncode(yourUSERdataToDownload)+' >Your Download</a>
然后将其注入 dom 供用户按下。
以下方法适用于 IE11+、Firefox 25+ 和 Chrome 30+:
<a id="export" class="myButton" download="" href="#">export</a>
<script>
function createDownloadLink(anchorSelector, str, fileName){
if(window.navigator.msSaveOrOpenBlob) {
var fileData = [str];
blobObject = new Blob(fileData);
$(anchorSelector).click(function(){
window.navigator.msSaveOrOpenBlob(blobObject, fileName);
});
} else {
var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str);
$(anchorSelector).attr("download", fileName);
$(anchorSelector).attr("href", url);
}
}
$(function () {
var str = "hi,file";
createDownloadLink("#export",str,"file.txt");
});
</script>
在行动中看到这个:http : //jsfiddle.net/Kg7eA/
Firefox 和 Chrome 支持数据 URI 导航,这允许我们通过导航到数据 URI 来创建文件,而 IE 出于安全目的不支持它。
另一方面,IE 具有用于保存 blob 的 API,可用于创建和下载文件。
试试这个:
document.body.innerHTML+="<a id='test' href='data:text;charset=utf-8,"+encodeURIComponent("hi")+"'>Your Download</a>";
document.getElementById('test').click();
如果要设置download
锚标记的文件名使用属性:
document.body.innerHTML+="<a id='test' href='data:text;charset=utf-8,"+encodeURIComponent("hi")+"' download=yourfilename>Your Download</a>";
document.getElementById('test').click();
您将需要服务器端功能才能为用户提供文本文件(javascript 是不够的)。您可以创建一个服务器端脚本来创建文件并使用 javascript 来提示用户保存它。