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

pdf文件预览和导出

抢先观看:

  • window.URL.createObjectURL():

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

const url = window.URL.createObjectURL(blob);
  • Blob 对象

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

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:任意的二进制数据,常用于下载文件

实现:

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

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;
  }
}
  • 在点击事件上,预览和导出方法:

//将点击事件绑定到预览或者导出按钮
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('文件下载失败');
  }
}


http://www.kler.cn/a/380992.html

相关文章:

  • 2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA
  • 江苏计算机专转本 技能Mysql知识点总结(二)
  • 页面无滚动条,里面div各自有滚动条
  • Leetcode中最常用的Java API——util包
  • GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录
  • harmony UI组件学习(1)
  • 鉴源实验室·加密技术在汽车系统中的应用
  • 力扣438——找到字符串中的所有字母异位词
  • stack和queue --->容器适配器
  • Oracle Sql查询和性能优化(持续更新)
  • 掌握 Jest 中的模块模拟:提升单元测试的灵活性与可靠性
  • 【企业微信新版sdk】
  • java.io.FileNotFoundException: Could not locate Hadoop executable: (详细解决方案)
  • JavaCV学习第一课
  • 栈 算法专题
  • SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
  • 深入探讨 ESPnet AIShell 项目:ASR 脚本 asr.sh 的实现与解析(一)之脚本前564行,定义各种配置项、函数和条件逻辑
  • Oracle 11g DataGuard GAP处理
  • uniapp实现【时间戳转换为日期格式(年-月-日 时-分-秒)】
  • 10款音视频转文字工具体验记!!!
  • docker构建次数过多导致硬盘爆满,清除
  • mysql上课总结(2)(DCL的所有操作总结、命令行快速启动/关闭mysql服务)
  • 【让中国再次伟大】腾讯开源大语言模型Hunyuan-large,支持高达256K文本序列
  • 基于qt vs下的视频播放
  • [Python学习日记-61] 什么是类与对象?类与对象是什么关系呢?我们该如何定义和使用类与对象呢?
  • 使用 Python 构建代理池并测试其有效性