javascript - 在 Safari 中使用 FileSaver.js 会损坏下载
问题描述
我正在使用 FileSaver.js 在客户端使用 FileSaver.js 下载图像。在 Chrome 和 IE11 中运行良好。但是在 Safari 11.1(我需要对 12+ 的支持)中,图像(.png 或 .jpg)会下载,但随后无法打开,并且操作系统会抱怨文件损坏或文件类型不受支持。
我的下载看起来像这样:
fileName = Ext.isIE || Ext.isSafari ? fileName + fileExtension : fileName;
saveAs(new Blob([file], { type: contentType }), fileName);
(saveAs 不会在 IE11 或 Safari 中添加文件扩展名,因此添加了 fileExtension)
无论如何,file 是一个 svg 字符串,contentType 是“image/png”或“image/jpeg”。我还尝试了以下调整:将 ";charset=utf-8" 附加到无济于事的 contentType 中。预先添加“数据:”来创建一个 dataURL,但我很确定 FileSaver.js 应该处理这个问题。
我读到在 FileSaver.js 中检查浏览器是否为 Safari 时可能存在问题,因此我进入 FileSaver.js 源代码并将检查更改为 Ext.isSafari(使用 ExtJs 6)。没有帮助。我难住了。
将不胜感激任何和所有的帮助,谢谢。
解决方案
当然,问题不在于 FileSaver.js。它甚至与浏览器无关,它是操作系统。
问题是我不能只在 SVG blob 上添加 .png 或 .jpg 并期望它表现良好。在 Windows(Chrome 和 IE11)上,“通过扩展名更改转换”工作正常,但 Mac 不接受它是合法的,因此拒绝文件损坏。
我可以通过下载带有 .svg 扩展名的 svg 文件来重新创建它,看到它在 Mac 上打开得很好,然后将扩展名更改为 .png 并看到我收到了相同的错误消息。我猜Windows只是更宽容。
推荐阅读
- rust - 检查 HashSet 中是否包含字符串切片
> 不分配新字符串 - angular - 如何正确制作放置在与项目/dockerfile不同的路径中的Docker Compose?
- python - 以实数形式将时间跨度字符串转换为秒
- python - 如何进行仅类型注释的类型断言?
- powershell - 在 Hyper-V 主机和来宾之间的 -FromSession 脚本中使用 Copy-Item 失败
- python - 在 python 3 中以格式给出'SyntaxError: invalid syntax'
- c - 便携式一致浮动
- node.js - Nodejs不会只为一条路线搜索公共文件夹中的文件
- sql-server - 没有登录的用户在“connectionString”中包含什么?
- ruby-on-rails - 更新使用活动存储的用户记录不起作用