[英]How to get a web browser to download a file that is stored in a JavaScript String?
我已经能够编写JavaScript以使浏览器使用以下代码从远程服务器下载文件:
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = "filename.zip"
document.body.appendChild(iframe);
哪个效果很好。 但是,现在我有一个不同的情况,在浏览器端我的JavaScript中的文件内容存储在一个字符串中,我需要触发该文件的下载。 我试过用这个替换上面的第三行,其中'myFileContents'是包含文件实际字节的字符串:
iframe.src = "data:application/octet-stream;base64," + Base64.encode(myFileContents);
这会导致文件下载,但文件名丢失。 在Chrome中,文件名只是“下载”。 另外我读过一些浏览器版本允许的文件大小有限制。
有没有办法实现这个目标? 使用JQuery就行了。 该解决方案需要支持任何文件类型 - zip,pdf,csv,png,jpg,xls等...
在一些较新的浏览器中,您可以使用a
标签上的新HTML5下载属性来实现此目的:
var a = document.createElement('a');
a.download = "filename.txt";
a.href = "data:application/octet-stream;base64," + Base64.encode(myFileContents);
a.click();
对于未来的解决方案,您可以查看HTML5 FileSystem API ,但目前大多数主流浏览器都不支持此API。 它对您来说可能没有多大用处,除非它可能为您提供另一种在本地存储文件的方法,如果您可以使用它。 但它不会将文件存储在用户本地可访问的文件系统上,您必须开发自己的基于浏览器的界面,以便用户与文件进行交互。 在任何情况下,使用标签上的新下载属性再次将文件从HTML5文件系统下载到用户本地文件系统,然后a
标签将引用HTML5文件系统中的位置而不是引用在线位置。
要使用iframe
元素执行此操作,您必须以某种方式将iframe上的Content-Disposition
请求标头设置为inline; filename="filename.txt"
inline; filename="filename.txt"
使用客户端JavaScript,我认为不可能这样做,很可能是因为安全问题。 如果你真的没有任何其他选择,你可以通过使用AJAX将字符串发送到服务器,然后再次使用正确的请求标头设置从那里下载来终止下载速度性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.