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

时间:2019-02-22 10:54:19

标签: javascript svg extjs 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)

无论如何,文件是一个svg字符串,contentType是“ image / png”或“ image / jpeg”。我还尝试了以下调整:     将“; charset = utf-8”附加到contentType上,这没有帮助。     在“ data:”之前添加以创建dataURL,但我很确定FileSaver.js应该可以处理此问题。

我阅读到,也许在FileSaver.js中检查浏览器是否为Safari时存在问题,所以我进入FileSaver.js源代码并将检查更改为Ext.isSafari(使用ExtJs 6)。没有帮助。我很沮丧

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当然,问题不在于FileSaver.js。它甚至与浏览器都不相关,它与操作系统有关。

问题是我不能只在SVG Blob上拍一个.png或.jpg并期望它表现良好。在Windows(Chrome和IE11)上,“通过扩展名更改进行转换”可以正常工作,但是Mac不接受它为合法文件,因此拒绝了该文件,因为它已损坏。

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