当前位置: 首页 > 面试题库 >

使用HTML5 / JavaScript生成并保存文件

彭展
2023-03-14
问题内容

我最近一直在摆弄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');

而已。



 类似资料:
  • 问题内容: 我试图将XML数据从网页转换为PDF文件,希望能完全在JavaScript中完成。我需要能够绘制文本,图像和简单形状。我希望能够完全在浏览器中做到这一点。 问题答案: 示例创建一个“ Hello World” PDF文件。

  • 我在写作。Net Core项目和管理一些文件GCS(谷歌云存储)与谷歌云存储V1.NET SDK.我有一些文件在文件夹中的"桶1"桶。当我生成带符号的url文件位于"桶1/folder1/subflder2"的结果,我收到的URL文件。但是当我下载这个文件时,它的名称带有“文件夹”路径,类似于“folder1_subfloder2_desiredFileName”。 我知道GCS没有文件夹,只有文

  • 问题内容: 我正在使用纯Javascript开发文本编辑器。我想要这样,以便当用户单击“保存”按钮时,编辑器将下载文件。我已经部分工作了: 该文件已下载,但问题在于该文件名为“ download”。 问题 :如何将文件名更改为所需的任何名称,例如? 问题答案: 用锚链接替换“保存”按钮,并动态设置新属性。适用于Chrome和Firefox:

  • 通过日志收集系统将分散在数百台服务器上的数据集中存储在某中心服务器上,这是运维最原始的需求。早年的 scribed ,甚至直接就把输出的语法命名为 <store>。Logstash 当然也能做到这点。 和 LogStash::Inputs::File 不同, LogStash::Outputs::File 里可以使用 sprintf format 格式来自动定义输出到带日期命名的路径。 配置示例

  • 问题内容: 是否可以在不使用PHP的情况下使用JavaScript/jQuery将文本保存到新的文本文件中?我要保存的文本可能包含我不想转义或使用urlencode的HTML实体,JS,HTML,CSS和PHP脚本! 如果只能使用PHP来实现,如何将文本传递给PHP而不进行编码? 问题答案: 您必须具有服务器端脚本来处理您的请求,这不能使用javascript完成。 要将没有URIencoding

  • 问题内容: 错误:字符串转义,格式化,由最初编辑,保存, 例如, a)如果在本地浏览器中打开“ saveFile.html”; b)输入“ abc” ; c)点击按钮; d)单击在对话框; e)保存到磁盘上; f)在浏览器中打开; g)在“ def”中输入; h)重复d),e),f); i)错误:第二个结果确实显示包含“ abc def”文本内容; 未 显示在: 在第 26 行生成的“ saveF