当前位置: 首页 > news >正文

企业网站建设美丽湖南建筑行业

企业网站建设美丽,湖南建筑行业,年度网站信息化建设工作计划,在微信上做彩票网站吗引言 在现代Web应用中#xff0c;文件预览功能是非常常见的需求之一。特别是在企业级应用中#xff0c;用户经常需要查看各种类型的文件#xff0c;如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个…引言 在现代Web应用中文件预览功能是非常常见的需求之一。特别是在企业级应用中用户经常需要查看各种类型的文件如 PDF、Word、Excel 等。本文将详细介绍如何在Vue项目中实现 PDF 文档的预览功能。 实现原理 后端API 后端需要提供一个API接口用于获取文件的二进制数据。这个接口通常会根据文件名或文件ID来返回文件内容。 前端处理 前端通过调用后端 API 获取文件的二进制数据并将其转换为 Blob 对象。然后使用window.URL.createObjectURL 方法生成一个临时的 URL最后通过 window.open 方法在新窗口中打开这个 URL从而实现文件预览。 代码示例 node 服务端代码 const express require(express); const multer require(multer); const fs require(fs); const path require(path);const app express(); // 定义文件夹路径 const mergedDir path.join(__dirname, merged);// 文件下载接口 app.get(/download, (req, res) {const { fileName } req.query;const filePath path.join(mergedDir, fileName);fs.access(filePath, fs.constants.F_OK, (err) {if (err) {return res.status(404).json({ error: 文件不存在 });}const stats fs.statSync(filePath);if (stats.isFile()) {const contentType getContentType(fileName);res.setHeader(Content-Type, contentType);// 对 fileName 进行编码const encodedFileName encodeURIComponent(fileName);res.setHeader(Content-Disposition, attachment; filename${encodedFileName});fs.createReadStream(filePath).pipe(res);} else {res.status(400).json({ error: 不是一个文件 });}}); });// 获取文件的 MIME 类型 function getContentType(fileName) {const ext path.extname(fileName).toLowerCase();switch (ext) {case .js:return application/javascript;case .json:return application/json;case .html:return text/html;case .css:return text/css;case .txt:return text/plain;case .png:return image/png;case .jpg:case .jpeg:return image/jpeg;case .gif:return image/gif;case .pdf:return application/pdf;case .doc:return application/msword;case .docx:return application/vnd.openxmlformats-officedocument.wordprocessingml.document;case .ppt:return application/vnd.ms-powerpoint;case .pptx:return application/vnd.openxmlformats-officedocument.presentationml.presentation;case .xlsx:return application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;default:return application/octet-stream;} } // 启动服务器 const PORT process.env.PORT || 3000; app.listen(PORT, () {console.log(Server is running on port ${PORT}); });前端代码实现 接口 API import request from /utils/request;// 获取文件列表 export function getFilesList() {return request({url: /getFilesList,method: get,}); }// 文件预览 export function previewFile(fileName) {return request({url: /download?fileName${fileName},method: get,responseType: blob,}); }页面代码 templatediv classtableel-table :datatableData header-aligncenter border stylewidth: 100%el-table-column aligncenter typeindex width60 label序号/el-table-columnel-table-column aligncenter propfileName label文件名 /el-table-column aligncenter propupTime label上传日期 width200 /el-table-column aligncenter fixedright label操作 width120template slot-scopescopeel-button clickhandleClick(scope.row) typetext预览/el-button/template/el-table-column/el-table/div /templatescript import { previewFile } from /api/file; import { timeStampToString } from /utils/utils; import { getFilesList } from /api/file;export default {name: fileTable,data() {return {tableData: [],}},created() {this.getFileName();},methods: {// 获取文件列表async getFileName() {const { code, data: resData } await getFilesList();console.log(code, data::: , code, resData);if (code 200) {resData.forEach(item {item.upTime timeStampToString(item.upTime);});this.tableData resData;}},handleBlob(blob, filename) {console.log(blob::: , blob,filename);let url window.URL.createObjectURL(blob);var tempwindow window.open(_blank);if (tempwindow) {tempwindow.location url;}},// 文件预览async handleClick(row) {try {const response await previewFile(row.fileName)console.log(response::: , response);this.handleBlob(response, row.fileName)} catch (err) {console.error(Failed to preview file, err);}},} } /script实现效果 设置网页标题为文件名 handleBlob(blob, filename) {console.log(blob::: , blob, filename);let url window.URL.createObjectURL(blob);// 创建一个新窗口let tempWindow window.open(, _blank);// 设置新窗口的标题为文件名tempWindow.document.title filename;// 在新窗口中嵌入一个 iframe 来预览 PDF 文件tempWindow.document.write(htmlheadtitle filename /title/headbody);tempWindow.document.write(iframe src url stylewidth:100%;height:100%;border:none;/iframe);tempWindow.document.write(/body/html);// 确保新窗口的内容加载完成后再释放 URLtempWindow.onload function () {window.URL.revokeObjectURL(url);};}, 修改后的效果 总结 本文详细介绍了如何在Vue项目中实现PDF文档的预览功能。通过前后端的协同工作我们实现了从文件的存储、获取到预览的完整流程。具体来说 后端API提供了文件下载接口根据文件名或文件ID返回文件的二进制数据并设置了正确的MIME类型。 前端处理通过调用后端API获取文件的二进制数据将其转换为 Blob 对象并生成一个临时的 URL。然后在新窗口中打开这个 URL实现文件预览。 优化体验为了提升用户体验我们进一步优化了预览功能通过在新窗口中嵌入 iframe 并设置网页标题为文件名使得预览界面更加友好和直观。 通过本文的介绍读者可以轻松地在自己的Vue项目中实现类似的功能提升应用的用户体验。希望本文对大家有所帮助。
http://www.lakalapos1.cn/news/46012/

相关文章:

  • 网站建设收费价格django做网站怎样
  • 汽车网站开发背景合肥行业网站建设
  • wordpress建立外贸网站建设一个网站需要哪些费用
  • 做投标需要知道什么网站上海金工建设集团有限公司网站
  • 做视频网站多少钱有做浏览单的网站
  • 网站关键词挖掘工具WordPress下如何用页面做侧边栏
  • 手机做图片的网站建筑网格化
  • 电商网站怎么制作文化产品电商网站建设规划
  • 软件开发接单网站找做网站找那个平台做
  • 网站管理系统是什么网站备案不注销有什么后果
  • 成年做羞羞的视频网站个人做网站可以盈利么
  • 燕郊网站开发光山县住房和城乡建设局网站
  • 网站模板好wordpress 5.0多站点
  • 平台网站开发可行性分析青岛企业网站推广
  • 池州网站制作公司国家企业信用公示系统官方网站
  • 可信网站认证代理网站开发设计思想报告
  • 西安企业黄页网站wordpress苏醒
  • 响应式网站的字体设置做免费推广的网站有哪些
  • 西昌手机网站建设成都彩钢顶防水网站为什么有价值是
  • 建设工程规范在哪个网站发布怎么备案网站
  • 前几年做哪个网站能致富安阳网站建设首选
  • 个人网站备案 流程南山区网站建设
  • 慈溪网站制作郴州网站推广公司排名
  • 网站制作 北京网站建设公司图片动画制作
  • 网站制作的基本流程是什么磁力蜘蛛种子搜索
  • 怎么知道网站是否被百度收录wordpress怎么可视化构建页面
  • 一个服务器可以放几个网站网络口碑营销的特点
  • 网站开发主要工作内容简述网页布局的几种方法
  • 重庆做企业年报在哪个网站做手机ppt制作软件
  • 商丘做手机做网站房屋自建设计哪个网站好