html - 根据 mime 类型,在弹出窗口中打开 PDF 或下载 word 文档
问题描述
我有一个在对话框中打开 pdf 的功能。它看起来像这样:
async function openPDFDialog (src)
{
// ...
modalDlg.querySelector('embed').src = src;
// ...
}
如果我有一个网址,例如。/orderFile/0/0
.
根据 mime 类型,我希望它执行不同的操作:
application/pdf
-> 在对话框中打开application/msword
-> 下载
解决方案
首先,您将需要fetch
该文件并获取 mime 类型。
- 但是,您包含的 mime 类型
application/msword
适用于.doc
文件,而不是.docx
. 正确的 mime 类型.docx
是application/vnd.openxmlformats-officedocument.wordprocessingml.document
.
为避免请求 url 两次,您可以将响应保存为Blob
.
从那里,根据 mime 类型,您使用 Blob 中的 url 来执行所需的操作。
let response = await fetch(src);
let mimeType = response.headers.get("Content-Type");
let blobURL = URL.createObjectURL(await response.blob());
if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')
{
let a = Object.assign(document.createElement('a'), {
href: blobURL,
download: "filename.docx"
});
document.body.appendChild(a);
a.click();
a.remove();
}
else if (mimeType === 'application/pdf')
{
await openPDFDialog(blobURL);
}
推荐阅读
- jenkins-job-dsl - Jenkins DSL Plugin (>=1.77): 在 pipelineJob 中使用 gerrit-trigger
- telegram - 无法将 Cloud Foundry 应用程序(红色节点)连接到 Watson Assistant
- c++ - 指针的动态数组,如何正确执行?
- sql - 在 SQL Server 中存储比分配列更多的字符
- python - 如何序列化 Wagtail 可订购模型?
- python - Bcbio-gff 文件创建问题
- c# - C# 单元测试无法识别其他类
- delphi - 如何使用尚未初始化的变量
- html - 多组件的routerLink
- javascript - 使用javascript在浏览器中捕获后退按钮的事件