如何在内存中创建一个供用户下载的文件,而不通过服务器?

1114
有没有办法在客户端创建一个文本文件,并提示用户下载,而不需要与服务器进行任何交互?
我知道我不能直接写入他们的机器(出于安全考虑),但我能创建文件并提示他们保存吗?

4
截至2014年4月,W3C尚未将文件系统API标准化。我猜那些使用Blob方案的人应该要小心谨慎一些。HTML5 Rocks网站的提示 W3C文件系统API邮件列表 - pravin
7
请参见: JavaScript:创建和保存文件 - Henry Woody
22个回答

1
我会使用一个 <a></a> 标签,然后设置 href='路径'。之后,在 <a> 元素之间放置一张图片,以便我可以看到它的可视化效果。如果你想的话,你可以创建一个函数来改变 href,这样它就不仅仅是相同的链接,而是动态的。
如果你想用 JavaScript 访问它,请给 <a> 标签一个 id从 HTML 版本开始:
<a href="mp3/tupac_shakur-how-do-you-want-it.mp3" download id="mp3Anchor">
     <img src="some image that you want" alt="some description" width="100px" height="100px" />
</a>

现在有 JavaScript:
*Create a small json file*;

const array = [
     "mp3/tupac_shakur-how-do-you-want-it.mp3",
     "mp3/spice_one-born-to-die.mp3",
     "mp3/captain_planet_theme_song.mp3",
     "mp3/tenchu-intro.mp3",
     "mp3/resident_evil_nemesis-intro-theme.mp3"
];

//load this function on window
window.addEventListener("load", downloadList);

//now create a function that will change the content of the href with every click
function downloadList() {
     var changeHref=document.getElementById("mp3Anchor");

     var j = -1;

     changeHref.addEventListener("click", ()=> {

           if(j < array.length-1) {
               j +=1;
               changeHref.href=""+array[j];
          }
           else {
               alert("No more content to download");
          }
}

-26
如果文件包含文本数据,我使用的一种技术是将文本放入textarea元素中,并让用户选择它(单击textarea然后按ctrl-A),然后复制并粘贴到文本编辑器中。

40
我曾考虑过,但从用户友好性的角度来看,这是灾难性的。此外,该文件必须保存为CSV扩展名。试着告诉你的用户这个要求。 - Joseph Silber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接