在 Safari 中使用 FileSaver.js 损坏下载

Using FileSaver.js in Safari damages download

我正在使用 FileSaver.js 在客户端使用 FileSaver.js 下载图像。在 Chrome 和 IE11 中运行良好。但在 Safari 11.1(我需要支持 12+)中,图像(.png 或 .jpg)下载后无法打开,OS 抱怨文件损坏或文件类型不受支持。

我的下载是这样的:

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。 在 "data:" 之前创建一个 dataURL,但我很确定 FileSaver.js 应该可以处理这个问题。

我读到在 FileSaver.js 中检查浏览器是否为 Safari 可能存在问题,所以我进入 FileSaver.js 源代码并将检查更改为 Ext.isSafari(使用ExtJS 6).没有帮助。我很难过。

非常感谢任何帮助,谢谢。

当然,问题不在于 FileSaver.js。它甚至与浏览器无关,它是 OS.

问题是我不能只在 SVG blob 上添加 .png 或 .jpg 并期望它表现良好。在 windows(Chrome 和 IE11)上,"conversion by extension change" 工作正常,但 Mac 不接受它是合法的,因此拒绝文件损坏。

我可以通过下载扩展名为 .svg 的 svg 文件来重新创建它,看到它在 Mac 上打开得很好,然后将扩展名更改为 .png 并看到我收到了相同的错误消息。我想 Windows 只是更宽容。