前端:ant design vue
后端:egg.js
项目进度:现在文件能够通过前端上传至后端的public文件夹中
需求:在前端能够在线展示上传的pdf、ppt等文件
已自行解决,后端获取文件,再使用二进制数据流传到前端,前端再转换下进行展示
后端:
'use strict';
const Controller = require('egg').Controller;
const fs = require('fs');
const path = require('path');
class ReadpdfController extends Controller {
async getPDFFile() {
const { ctx } = this;
const { sendURL } = ctx.request.body;
try {
const filePath = path.join('app/public/', sendURL)
const fileData = await new Promise((resolve, reject) => {
fs.readFile(filePath, (error, data) => {
if (error) {
reject(error)
} else {
resolve(data)
}
})
})
this.ctx.body = fileData
this.ctx.type = 'application/pdf'
} catch (error) {
console.log(error);
ctx.body = {
errCode: 1,
errMsg: '数据查询错误',
};
}
}
}
module.exports = ReadpdfController;
前端:
axios.post('/api/readpdf/getPDFFile', { sendURL }, { responseType: 'blob' })
.then(response => {
// 获取PDF文件数据并存储在data中
const blob = new Blob([response.data], { type: 'application/pdf' })
const data = URL.createObjectURL(blob)
console.log(data, 'data');
// 打开PDF文件
window.open(data, '_blank')
})
这些百度一下都一堆的https://www.cnblogs.com/bore/p/13072477.html
或者直接用iframe进行显示
就是根据不同的 文件和后缀 使用不同的预览组件 。其中 pdf 可以直接用 iframe显示 或者 a链接 。其他类型只能用 对应的插件了