在移动设备上从 Angular 下载 Word .docx 作为 Blob 文件

Posted

技术标签:

【中文标题】在移动设备上从 Angular 下载 Word .docx 作为 Blob 文件【英文标题】:Download Word .docx as Blob file from Angular on mobile devices 【发布时间】:2022-01-02 04:48:02 【问题描述】:

我正在尝试从 Angular 应用程序中的 REST API (.NET Core FileContentResult) 下载 .docx 文件。在 PC 上一切正常,但在 VMware Workspace ONE Web 浏览器中下载 .docx 文件时出现问题(没有尝试 Chrome 或 Safari 等标准浏览器,看起来只有 android WebView)。这是公司应用程序,此浏览器是唯一允许的。

问题仅在于 .docx 文件。 PDF、.doc 和 .xlsx(由ClosedXML 创建)等文件运行良好。

REST API 调用(也尝试使用“arraybuffer”而不是“blob”并在客户端创建 Blob 对象,但问题仍然存在)

this.httpClient.get(requestUrl, 
  responseType: 'blob',
  observe: 'response'
);

然后我用FileSaver 保存响应正文。

generateDocument(file: string | Blob, name: string): void 
  FileSaver.saveAs(file, name);

我还尝试了创建链接并单击它的方法(它不起作用)。 使用 window.open(blobUrl) 的解决方案不起作用。

编辑:

我得到的信息是它在 ios 中使用相同的浏览器根本不工作。用户收到错误消息“链接无效。

有人可以帮我解决这个问题吗?谢谢。

【问题讨论】:

您是否有无法正常工作的可用测试文件?在 Android 或 IOS 上测试? 我还测试了在 MS Word (Microsoft 365) 中创建的简单 .docx 文件,其中包含文本“Test”。我正在Android上进行测试。它试图在手机上的 Microsoft Word 中打开文档,但 Word 说文件已损坏,如果我尝试在那里使用修复,我只会收到错误消息“文件无法打开”。 我给你做了一个测试文件:batman.dev/static/70085191/download.docx 我还使用不同的解决方案创建了测试页面,它们在 Chrome 和 Safari 等浏览器中都可以正常工作,但在 VMware Workspace ONE Web 浏览器中却不行。问题是浏览器。 【参考方案1】:

如果您可以检索获得ArrayBuffer,则可以使用这些字节来启动下载:

在这里测试:https://batman.dev/static/70085191/

async function downloadUrl(url) 
  downloadBuffer(
    await (await fetch(url)).arrayBuffer()
  )


function downloadBuffer(arrayBuffer) 
  const a = document.createElement('a')
  a.href = URL.createObjectURL(new Blob(
    [ arrayBuffer ],
     type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' 
  ))
  a.download = 'my-file.docx'
  a.click()


【讨论】:

我试过了,但没有用。手机打不开文档。 试试我添加的工作测试。它在我的 Android Chrome 手机上下载并打开。 它在 Chrome 中运行良好,但在 VMware Workspace ONE Web 中无法运行。我使用不同的解决方案制作了测试页面,并在 Android 上的 Chrome 和 iOS 上的 Safari 中进行了测试。在这些浏览器中一切正常。

以上是关于在移动设备上从 Angular 下载 Word .docx 作为 Blob 文件的主要内容,如果未能解决你的问题,请参考以下文章

在某些设备上从 Play 商店下载后,我的应用程序卡在白屏

Angular js中的文件下载

在 Java、Android 上从 Youtube 下载视频的代码

Angular/Spring Boot Rest API下载Word文档

Dart Angular - 在移动设备上获取滑动事件

Angular Animations 和 Phonegap 不在移动设备上运行