简单客户端应用程序中的文件处理

File handling in simple client-side app

本文关键字:文件 处理 客户端 应用程序 简单      更新时间:2024-05-02

需要有关在Javascript应用程序中处理简单文件下载(.ics)的选项的建议。

假设s.icsMsg是一个格式良好的文本/日历字符串,则以下内容在Chrome中有效:

var downloadLink = document.createElement("a");
downloadLink.href = 'data:text/calendar;charset=utf-8,' + s.icsMsg; 
downloadLink.download = "Calendar.ics";
document.body.appendChild(downloadLink); 
downloadLink.click();
document.body.removeChild(downloadLink);

文件已下载,命名正确,并打开到邮件客户端。在IE 9+中,我得到了一个数据区域大小错误。

有没有一种方法可以在IE中实现这一点,纯粹在客户端上实现?我知道我可以通过在http头中设置内容处理来实现这一点,但由于文件是在客户端生成的,所以需要两个额外的跳跃来将其向上推、保存,然后用正确的头将其发送回(如果这样做有效的话)。

任何建议都很好。。。

找到了一个解决方案。在IE10/11中运行良好,我只是没有显示触发该函数的链接。我想大多数用户都会使用移动设备,所以旧的IE不会成为问题。

将对非IE浏览器使用window.open(),但找不到如何设置文件名。虽然还没有分阶段,但一切都在起作用。

if (!s.isIE) {
    var downloadLink = document.createElement("a");
    downloadLink.href = 'data:text/calendar;charset=utf-8,'r'n' + escape(s.icsMsg);
    downloadLink.download = "Calendar.ics";
    document.body.appendChild(downloadLink);
    downloadLink.click();
    document.body.removeChild(downloadLink);
}
else {
    var blob = new Blob([s.icsMsg]);
    window.navigator.msSaveOrOpenBlob(blob, 'Calendar.ics');
}