我最近一直在摆弄WebGL,并让Collada阅读器工作。问题是它的运行速度非常慢(Collada是一种非常冗长的格式),因此我将开始将文件转换为更易于使用的格式(可能是JSON)。我已经有了使用JavaScript解析文件的代码,因此我也可以将其用作导出器!问题正在保存。
现在,我知道我可以解析文件,将结果发送到服务器,然后让浏览器从服务器请求文件下载作为下载。但是实际上,服务器与该特定过程无关,那么为什么要参与其中呢?我已经在内存中保存了所需文件的内容。有什么办法可以使用户使用纯JavaScript进行下载?(我对此表示怀疑,但也可能会问…)
需要明确的是:我不会在用户不知情的情况下访问文件系统!用户将提供一个文件(可能通过拖放),脚本将转换文件在内存中的位置,并提示用户下载结果。就浏览器而言,所有这些都应该是“安全”的活动。
[编辑]: 我没有提前提到它,所以回答“ Flash”的海报是足够有效的,但是我正在做的部分工作是试图强调使用纯HTML5可以完成的工作…因此Flash是就我而言 (尽管对于使用“真实” Web应用程序的任何人来说,这都是一个完全正确的答案。)在这种情况下,除非我不想让服务器参与其中,否则看起来我很不走运。不管怎么说,还是要谢谢你!
好的,创建一个data:URI绝对对我有用,这要感谢Matthew和Dennkster指出了这一选择!基本上,这是我的操作方式:
1)将所有内容放入一个名为“内容”的字符串中(例如,通过在此开始创建内容或读取已构建页面的标签的innerHTML)。
2)建立资料URI:
uriContent = "data:application/octet-stream," + encodeURIComponent(content);
长度会受到浏览器类型等的限制,例如Firefox 3.6.12至少可以支持256k。在Base64中进行编码而不是使用encodeURIComponent可能会使事情更高效,但是对我来说没关系。
3)打开一个新窗口,并将其“重定向”到此URI提示输入我的JavaScript生成页面的下载位置:
newWindow = window.open(uriContent, 'neuesDokument');
而已。