Javascript 使用fetchapi下载文件

Javascript 使用fetchapi下载文件,javascript,fetch,Javascript,Fetch,我试图通过点击一个按钮下载一个文件,但它没有下载该文件。尽管如此,如果我转到浏览器上的url,则会下载docx 获取请求: const response = await fetch(`/template/${id}/docx`, { method: 'GET', credentials: 'include', }); const blob = await response.blob(); const file = new File([blob], id, {type: blob.ty

我试图通过点击一个按钮下载一个文件,但它没有下载该文件。尽管如此,如果我转到浏览器上的url,则会下载docx

获取请求:

const response = await fetch(`/template/${id}/docx`, {
  method: 'GET',
  credentials: 'include',
});

const blob = await response.blob();

const file = new File([blob], id, {type: blob.type, lastModified: Date.now()});
答复:


A
fetch
调用要么用对象解析,要么用错误拒绝。如果您想要响应主体(在您的情况下可能是一个二进制blob),那么您可以尝试:

const response = await fetch(`/template/${id}/docx`, {
  method: 'GET',
  credentials: 'include',
});
const doc = await response.blob()

您仍然需要注意显示它、将它写入磁盘,以及您想对它执行的任何操作。

如何将它转换为docx?没有办法直接下载文件而不必经过blob转换吗?下载它是什么意思?是否要在某些事件上显示标准文件下载对话框,并让用户下载文件?在这种情况下,您可以这样做:@AnAspiringCanadian看到了更新,但并不确定您的意图。如果你在浏览器中,你没有从js访问用户文件系统的权限,因此如果你只想在内存中处理文件,那么你就有了答案。这篇文章很有帮助。我在隐藏的锚标记上添加了路径并触发了一次单击,因为我们已经保存了docx文件,并且不需要将blob转换为docx。如果使用a标记,文件将自动开始下载