javascript - 创建一个临时文件并在用户计算机上的不同应用程序中打开它
问题描述
我正在编写一个内部公司网站,除其他外,该网站生成和呈现 XML 文件。这些文件通常不打算直接保存,用户应该很少需要首先查看它们的原始文件。但是,该站点可以下载并打开安装在用户计算机上的 XML 处理器中的文件。
该网站最初是为 Internet Explorer 6 编写的,我正在尝试将其升级为与现代浏览器兼容。它最初使用的与 IE6 兼容的代码是这样的:
function XmlOpen(path) { // path = "C:/Program Files/path/to/executable.exe", hardcoded
// xmlOutput is a global variable containing the raw XML to be saved
if (xmlOutput) {
// global variable to cache most recently downloaded file. If the XML is regenerated
// this will be reset
if (!xmlTempPath) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tempfolder = 2;
var tfolder = fso.GetSpecialFolder(tempfolder);
var tname = fso.GetTempName();
var tempfile = tfolder.CreateTextFile(tname);
tempfile.writeline(xmlOutput);
tempfile.close();
xmlTempPath = tfolder.Path + '\\' + tname;
}
var shell = new ActiveXObject("WScript.Shell");
var cmd = '"' + path + '" "' + xmlTempPath + '"';
shell.Run(cmd);
}
return false;
}
理想情况下,我对重写的要求是除了初始点击之外,它需要尽可能少的用户交互。
我的基本方法是使用注册表项来标记适当的 XML 程序,而不是使用 ActiveXObjects。这些可以在入职期间安装,也可以在安装我们所有其他内部工具时安装,所以我想我应该能够打开一个 urlxmlprogram://filename
并让它工作,只要我有一个文件可以使用。
我还可以轻松地下载文件,只需将 XML 写入 blob,生成随机文件名,然后出现下载提示即可。但是后来我不知道下载文件的文件夹和实际名称,所以我不能自动使用xmlprogram://
url 打开它。因此,我需要以某种方式将文件临时保存在我的 javascript 知道完整路径的地方,并使用链接在其上调用用户程序。但是据我所知,目前不可能在用户的计算机上写入实际的临时文件,并且您不能将 localstorage 视为文件。
tl;dr 如何将临时文件保存到用户的计算机上,以便我知道它的保存位置并让他们自动在不同的程序中打开它?
解决方案
根据你的问题,据我所知这是不可能的。纯浏览器-JavaScript 无法获取有关用户文件系统的信息。默认下载路径也可能包含风险信息。
而且文件下载位置取决于浏览器中的设置,不能绕过这个设置,否则会侵犯用户的安全。
推荐阅读
- excel - 包含在 Excel VBA 代码中的假日逻辑
- python - 获取链接 ng href selenium
- forms - TYPO3 form_to_database:如何限制结果显示到后端用户组?
- r - 在每个单词的中心加入符号
- python - How to pass a list as an argument when using restful api and flask
- spring-boot - 如何在 Swagger UI 中自定义 RequestBody 的示例值
- python - Kivy:更新标签文本将 schedule_once
- json - postgresql中每个json键/值对的一行
- angular - 如何使 mat-dialog 中的按钮也可以在 Enter 上工作?
- reactjs - 控制 react-data-table-component 列的宽度