function(filename,text){
// Set up the link
var link = document.createElement("a");
link.setAttribute("target","_blank");
if(Blob !== undefined) {
var blob = new Blob([text], {type: "text/plain"});
link.setAttribute("href", URL.createObjectURL(blob));
} else {
link.setAttribute("href","data:text/plain," + encodeURIComponent(text));
}
link.setAttribute("download",filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
var csvContent=data; //here we load our csv data
var blob = new Blob([csvContent],{
type: "text/csv;charset=utf-8;"
});
navigator.msSaveBlob(blob, "filename.csv")
17 回答
您甚至可以做一个比URI更好的方法 - 使用Chrome,您还可以建议文件的名称,如this blog post about naming a download when using URIs中所述 .
以上所有示例在chrome和IE中都运行良好,但在Firefox中失败 . 请考虑在身体上添加锚点并在点击后将其移除 .
根据@Rick的答案,这真的很有帮助 .
如果你想以这种方式分享它,你必须scape字符串
data
:“抱歉,由于我目前在StackOverflow中的声誉很低,我无法对@ Rick的答案发表评论 .
edit suggestion被分享并被拒绝 .
以上所有解决方案都不适用于所有浏览器 . 以下是最终适用于IE 10,Firefox和Chrome(以及 without jQuery或任何其他库)的内容:
请注意,根据您的具体情况,您可能还需要在删除
elem
后调用URL.revokeObjectURL . 根据URL.createObjectURL的文档:您可以使用数据URI . 浏览器支持不同;见Wikipedia . 例:
八位字节流是强制下载提示 . 否则,它可能会在浏览器中打开 .
对于CSV,您可以使用:
试试jsFiddle demo .
截至2014年4月,FileSytem API可能未在W3C中标准化 . 我想,任何用blob查看解决方案的人都应该小心谨慎 .
HTML5 rocks heads up
W3C Mailing List on FileSytem API
此解决方案直接从tiddlywiki(tiddlywiki.com)github存储库中提取 . 我几乎在所有浏览器中都使用了tiddlywiki,它就像一个魅力:
Github回购:Download saver module
它实际上是可能的 - 使用Flash .
您可以使用JS生成内容,然后初始化一些flash变量或只是在flash电影中执行所有操作 .
请查看this的一些重要评论 .
如前所述,filesaver是一个很好的包,可以在客户端使用文件 . 但是,大文件效果不佳 . StreamSaver.js是一个可以处理大文件的替代解决方案(在FileServer.js中指向):
HTML5就绪浏览器的简单解决方案......
Usage
我很高兴使用FileSaver.js . 它的兼容性非常好(IE10和其他所有东西),使用起来非常简单:
如果您只想将字符串转换为可供下载,可以使用jQuery尝试 .
以下方法适用于IE11,Firefox 25和Chrome 30:
在行动中看到这个:http://jsfiddle.net/Kg7eA/
Firefox和Chrome支持用于导航的数据URI,这允许我们通过导航到数据URI来创建文件,而IE出于安全目的不支持它 .
另一方面,IE具有用于保存blob的API,可用于创建和下载文件 .
如果文件包含文本数据,我使用的技术是将文本放入textarea元素并让用户选择它(单击textarea然后按ctrl-A)然后复制,然后粘贴到文本编辑器 .
对我来说,这完全有效,下载的文件名和扩展名相同
<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>
'title'是带扩展名的文件名,即
sample.pdf
,waterfall.jpg
等 .'file64'是这样的base64内容,即
Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO
适用于IE10的解决方案:(我需要一个csv文件,但它足以将类型和文件名更改为txt)