pdf文件预览和导出

抢先观看:

window.URL.createObjectURL():

用于根据传入的 Blob 对象或 File 对象生成一个临时的、可访问的 URL,仅在浏览器会话中有效,并且不会上传到服务器。

javascript 复制代码
const url = window.URL.createObjectURL(blob);

Blob 对象:

是 Web 开发中用来表示二进制数据的大型对象,它可以是不可变的类文件对象,用于存储和处理大量的二进制数据,如文本文件、图像、音频等。

javascript 复制代码
const blob = new Blob([data], { type: 'application/pdf' });

Blob特点

①不可变Blob 对象一旦创建,就无法修改内容,它是只读的。

②类文件对象:它允许在不访问文件系统的情况下处理数据,如读取或操作二进制文件(如图片和视频等)。

③支持切片Blob 支持通过 slice() 方法进行切片,创建一个新的 Blob,从而提取其中的部分数据。

Blob 的类型:

type 参数用于指定数据的 MIME 类型

MIME类型是一种互联网标准,用于表示文件的类型和格式。它帮助浏览器和服务器了解文件内容的性质,并选择合适的方式来处理或呈现它。

MIME 类型组成:主类型子类型,用斜杠(/)分隔,例如 text/htmlimage/png

MIME类型使用场景:web浏览器(Content-Type,可以确认 MIME 类型)、文件上传、API响应、邮件响应。


MIME常见类型以及对应格式:

1. 文本类型
  • text/plain :普通文本文件,例如 .txt
  • text/html :HTML 文档,例如 .html
  • text/css :CSS 样式表,例如 .css
  • text/javascript :JavaScript 脚本,例如 .js
2. 图像类型
  • image/jpeg :JPEG 图像,例如 .jpg, .jpeg
  • image/png :PNG 图像,例如 .png
  • image/gif :GIF 图像,例如 .gif
  • image/svg+xml :SVG 矢量图形,例如 .svg
3. 音频类型
  • audio/mpeg :MP3 音频,例如 .mp3
  • audio/ogg :Ogg Vorbis 音频,例如 .ogg
  • audio/wav :WAV 音频,例如 .wav
4. 视频类型
  • video/mp4 :MP4 视频,例如 .mp4
  • video/webm :WebM 视频,例如 .webm
  • video/ogg :Ogg Theora 视频,例如 .ogv
5. 应用类型
  • application/json :JSON 数据,例如 .json
  • application/xml :XML 文档,例如 .xml
  • application/pdf :PDF 文件,例如 .pdf
  • application/zip :ZIP 压缩包,例如 .zip
  • application/vnd.ms-excel :Excel 文件,例如 .xls
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet :Excel 2007+ 文件,例如 .xlsx
  • application/vnd.google-earth.kml+xml :KML 文件,例如 .kml
  • application/octet-stream:任意的二进制数据,常用于下载文件

实现:

后端接口请求并返回文件流数据:

javascript 复制代码
import http from "@/api/index";
export async function ReportApi (params) {
  try {
    const res = await http({
      url: "/api-flight/uavFlyData/history/report",
      method: "POST",
      data: params,
      headers: {
        "Content-Type": "application/json;charset=UTF-8",
      },
      responseType: 'blob'
    });
    console.log(res, 'res');
    return res;
  } catch (error) {
    console.log(error, 'error');
    return error;
  }
}

在点击事件上,预览和导出方法:

javascript 复制代码
//将点击事件绑定到预览或者导出按钮
const reportCilck=()=>{
try {
    let params = {
     ...//传入所需的参数
    }
    const res = await ReportApi(JSON.stringify(params))
    if (res && res.status === 200) {
//创建 Blob 对象
      pdfUrl.value = window.URL.createObjectURL(new Blob([res.data], { type: 'application/pdf' }));
      const fname = '文件导出.pdf';
//创建一个 <a> 元素用于触发下载
      const link = document.createElement('a');
//设置连接属性
      link.href = pdfUrl.value;
      link.setAttribute('download', fname);
//触发下载并清理
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
      window.URL.revokeObjectURL(pdfUrl.value);
      ElMessage.success('文件下载成功');
    }
  } catch (err) {
    ElMessage.error('文件下载失败');
  }
}
相关推荐
qq_5470261795 小时前
Flowable 工作流引擎
java·服务器·前端
刘逸潇20055 小时前
CSS基础语法
前端·css
吃饺子不吃馅6 小时前
[开源] 从零到一打造在线 PPT 编辑器:React + Zustand + Zundo
前端·svg·图形学
小马哥编程7 小时前
【软考架构】案例分析-Web应用设计(应用服务器概念)
前端·架构
鱼与宇7 小时前
苍穹外卖-VUE
前端·javascript·vue.js
啃火龙果的兔子7 小时前
前端直接渲染Markdown
前端
z-robot7 小时前
Nginx 配置代理
前端
用户47949283569157 小时前
Safari 中文输入法的诡异 Bug:为什么输入 @ 会变成 @@? ## 开头 做 @ 提及功能的时候,测试同学用 Safari 测出了个奇怪的问题
前端·javascript·浏览器
开开心心就好8 小时前
电子报纸离线保存:一键下载多报PDF工具
网络·笔记·macos·pdf·word·音视频·phpstorm
没有故事、有酒8 小时前
Ajax介绍
前端·ajax·okhttp