在 Firefox 中打开对象 URL 时,文件内容正确显示(在 PDF 查看器中),但“将页面另存为...”无法下载 blob。Firefox 中的下载列表将该文件列为“失败”。点击“重试”成功。
同样的方法在 Chrome 中也能成功运行。
不涉及后端(此时)。Blob 在前端正确检索并显示,但只有在重试时才能下载。
对象 URL 没有被撤销(我仍然可以在会话存储中看到 blob 的条目。它似乎总是第二次工作似乎指向我的时间问题,但我不知道在哪里看看这里失败的地方。
window.open(URL.createObjectURL(blob))
blob 是使用 Angular 的 HttpClient 从后端的内容创建的:
getContentFileById(id: string): Observable<Blob> {
return this.http.get(`${this.documentUrl}/${id}/content`, {
responseType: 'blob'
});
}
这适用于 macOS Catalina (10.15.5) 上的当前 Firefox (78.0.2) 和 Firefox Developer Edition (79.0b9)。
它发生在具有原始内容处置的文件中,attachment
或者inline
尽管我怀疑它在转换为 blob 时无论如何都会丢失。
更新:
这是一个简化的最小示例,我在其中看到了相同的行为。我不知道如何Blob
直接从 ASCII 二进制表示创建一个,因此该示例使用基于 base64 的字符串。但是,打开创建的对象 URL 的基本思想保持不变:
http://jsfiddle.net/4m8onzu6/9/
不幸的是,此示例仅在 Firefox 中以 PDF 文件的形式打开,而我的实际代码也适用于 Chrome...
我注意到选择正常的下载按钮(大多数用户可能使用)是可行的。只有当您尝试“将页面另存为...”时它才会首先失败,但可以通过单击“下载”列表中的“重试”来下载文件...