我最近一直在摆弄WebGL,并且让一个Colada阅读器正常工作.问题是它相当慢(COLLADA是一种非常冗长的格式),所以我要开始将文件转换成更容易使用的格式(可能是JSON).我已经有了用JavaScript解析文件的代码,所以我也可以像使用我的导出器一样使用它!问题是存钱.

现在,我知道我可以解析文件,将结果发送到服务器,并让浏览器请求从服务器下载该文件.但实际上,服务器与这个特定的过程无关,所以为什么要让它参与进来呢?我的内存中已经有了所需文件的内容.我有没有办法用纯JavaScript向用户提供下载?(我对此表示怀疑,但不妨问问……)

需要说明的是:在用户不知情的情况下,我不会try 访问文件系统!用户将提供一个文件(可能通过拖放),脚本将转换内存中的文件,并提示用户下载结果.就浏览器而言,所有这些都应该是"安全的"活动.

[编辑]:我没有提前提到,所以回答"Flash"的海报足够有效,但我正在做的一部分是试图强调纯HTML5可以做什么...所以Flash就在我的情况下.(尽管这对任何一个使用"真正"网络应用的人来说都是一个非常有效的答案.)在这种情况下,除非我想让服务器参与进来,否则看起来我运气不好.无论如何谢谢你!

推荐答案

好的,创建一个数据:URI对我来说绝对是个好办法,多亏Matthew和Denkster指出了这个选项!我基本上是这样做的:

1)将所有内容放入一个名为"content"的字符串中(例如,通过最初在那里创建它或通过读取已构建页面的标记的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');

就这样.

Javascript相关问答推荐

ReactJS中的material UI自动完成类别

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

将json数组项转换为js中的扁平

为什么从liveWire info js代码传递数组我出现错误?

如何在使用fast-xml-parser构建ML时包括属性值?

从实时数据库(Firebase)上的子类别读取数据

我开始使用/url?q=使用Cheerio

Chart.js V4切换图表中的每个条,同时每个条下有不同的标签.怎么做?

useNavigation更改URL,但不呈现或显示组件

如何在不创建新键的情况下动态更改 map 中的项目?

切换时排序对象数组,切换不起作用

使用POST请求时,Req.Body为空

如何在文本字段中输入变量?

如何在JAVASCRIPT中合并两组对象并返回一些键

如何在HTMX提示符中设置默认值?

OnClick更改Json数组JSX中的图像源

MongoDB中的嵌套搜索

为什么NULL不能在构造函数的.Prototype中工作

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

使用Java脚本筛选数组中最接近值最小的所有项