如何在 VueJS 中动态提供 API 发送的 pdf 文件? [复制]

Posted

技术标签:

【中文标题】如何在 VueJS 中动态提供 API 发送的 pdf 文件? [复制]【英文标题】:How to dynamically serve a pdf file sent by API in VueJS? [duplicate] 【发布时间】:2019-03-16 21:33:43 【问题描述】:

我想在我的 VueJS 客户端中提供由我的 API 发送的文件。更具体地说,当浏览给定的 URL 时,如果浏览器支持文件(pdf、文本或图像)应该打开它(例如 Chrome 如何打开 PDF)。我想用 VueJS 或纯 html/CSS/JS 来做。

我有一个快速 API 正在工作,并且在 API 中打开文件的 URL 会打开它。它直接使用 Express 的sendfile 方法。现在,我想在我的客户端中模仿这种行为,而不是将用户重定向到我的 API:我希望他留在同一个域中。

这是我的 API:

const express = require('express')

const router = express.Router()
router.get('/files/*', (req, res) => res.status(200).sendFile('C://mockfile.pdf'));
module.exports = router;

localhost:3000/files/ 上的任何位置都会在浏览器中打开文件。但现在我希望我的客户有相同的行为,而无需将用户重定向到 localhost:3000(VueJS 应用程序在 localhost:8080 上运行)。

例如,继续localhost:8080/mockfile.pdf 将直接在浏览器中打开文件。如果需要,我可以使用任何库(我已经使用 axios)。

我怎样才能做到这一点?

【问题讨论】:

alexhadik.com/blog/2016/7/7/l8ztp8kr5lbctf5qns4l8t3646npqh 对 *** 问题和博客的回复仅强制下载内容。标题已经正确,因为我的 API URL 打开了文件。我只想将页面“嵌入”到我的客户端中。 这个问题不是vuejs特有的吗? 这个问题是用 vue.js 标记的,所以我假设它与 vuejs 相关。标题也有点暴露了...... 我试过下面的包。它确实渲染了 pdf,但它自己渲染它,而不使用内置的 pdf 查看器。 【参考方案1】:

我相信这个包裹就是你要找的 vue-pdf可以用npm下载安装。

然后像这样在你的模板中使用它:

<pdf src="http://localhost:3000/files/mockfile.pdf" @num-pages="pageCount = $event" @page-loaded="currentPage = $event"></pdf>

有关如何处理文档上的事件的详细信息,请参阅链接文档。

【讨论】:

我试过使用这个包。它自己渲染 pdf,但不使用浏览器内置的 pdf 查看器。我的 API 使用 Express 的 sendfile 方法,这会直接在浏览器中呈现 pdf。我只是想要一种在另一个 URL 中使用此响应的方法。

以上是关于如何在 VueJS 中动态提供 API 发送的 pdf 文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

VueJs 中的动态类和颜色绑定?

通过Vuejs调用时如何使Nodejs重定向工作

如何动态更改 CSS 光标 vuejs

如何使用 Wordpress REST api 从 Vuejs 向 Contact-Form-7 发送消息?

如何在 VueJS 的 HTML 和脚本的其他部分中使用来自 API 响应的 id

VueJS - 如何在没有任何硬代码的情况下使组件完全动态化