首页 > 其他分享 >前端页面查看pdf,后端数据返回blob;blob与json格式转换

前端页面查看pdf,后端数据返回blob;blob与json格式转换

时间:2023-02-28 14:46:17浏览次数:43  
标签:返回 文件 格式 json blob reader pdf

<a-drawer
      title="查看报告"
      width="520"
      :closable="false"
      :visible="visible"
      @update:visible="updateVisible"
      @close="close"
    >
     <a-spin tip="加载中..." :spinning="!pdfUrl">
       <iframe :src="pdfUrl" width="100%" style="height: 80vh;" />
     </a-spin>
     <a-button type="primary" style="margin-left: 400px" @click="close">关闭</a-button>
</a-drawer>

后端返回数据是blob时,调用接口时需要传参  responseType: 'blob'。否则会返回一大串的乱码

axios.get(url, {
    params: params,
    responseType: 'blob'
 }

axios设置responseType = 'blob'请求下载导出一个文件,请求成功时返回的是一个流形式的文件。但是请求失败的时候后端返回的是json ,不会处理错误信息,而是直接导出包含错误信息的文件。

 

接口返回正确时,res.type === 'application/pdf' 或其他文件形式

if (res.type === 'application/pdf') {
    this.pdfUrl = window.URL.createObjectURL(res)
}

 

接口返回错误时,会返回json格式,而不是blob格式了。但是我们调用接口时传了responseType: 'blob'。需要将blob转化为json格式。

const reader = new FileReader()
reader.readAsText(response.data, 'utf-8')
reader.onload = function() {
    JSON.parse(reader.result)
}
response.data是blob,如果不是就会报 Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'.

这里使用blob转json的方法后reader的值都为null,可能和返回数据有关。
解决方案:调用2次接口。第一次传参blob,返回数据报错,第二次不传blob,直接返回json。就是不够优雅



扩展:

readAsBinaryString:该方法将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。

readAsDataURL:这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URL,Data URL是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。

readAsText:该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。

FileReader.readAsText(file, [encoding]);
encoding常见有3种编码, asni,utf8,gbk2312. 

 

标签:返回,文件,格式,json,blob,reader,pdf
From: https://www.cnblogs.com/zuojiayi/p/17164178.html

相关文章

  • golang实现类似PHP json_encode和json_decode 函数
    类似PHP json_encode和json_decode的用法/*data:=map[string]interface{}{"name":"Tom","age":18,"gender":"male",......
  • 转~~~学习File、Blob、FileReader、ArrayBuffer、Base64
    BlobBlob全称为binarylargeobject,即二进制大对象。blob对象本质上是js中的一个对象,里面可以储存大量的二进制编码格式的数据。Blob对象一个不可修改,从Blob中读取内......
  • npm install 报错 The package-lock.json file was created with an old version of n
    1.报错截图: 2 报错原因:npm版本过高,解决方法见第如下npminpm@6-g检测npm-vnpm版本版本已经降低再进行npminstall的操作就不会报错了。......
  • springboot中json参数映射
    文章目录​​json映射不到实体上​​​​问题分析​​​​解决方案​​​​json映射到String查不到数据​​​​问题分析​​​​解决方案​​​​自动映射入参可以多吗,可以......
  • npm run 执行多任务的package.json配置
    有时需要在运行npmrun时,执行多个自定义的任务,此时可以使用增加scripts中条目,然后用一个总任务脚本将相关条目用&&串联起来的方式进行。我们知道:在package.json中,scripts里......
  • FastJson参数
    名称含义备注QuoteFieldNames输出key时是否使用双引号,默认为true UseSingleQuotes使用单引号而不是双引号,默认为false WriteMapN......
  • python序列化 json和pickle
    #1、什么是序列化#序列化指的是把内存的数据类型转成一个特定格式的内容#该格式的内容可用于存储或者传输给其它平台使用#内存中的数据类型---》序列化----》特定......
  • json-bigint处理前端long丢失精度问题
    通过ajax请求回来的数据在response和preview两种状态显示的id是不同的。      原因:response中的看到的数据格式其实是字符串(ajax请求回来的数据本质上是字......
  • SumatraPDF 高级设置
    SumatraPDF高级设置//无文档时,窗口的背景色,默认为黄色MainWindowBackground=#fff200//是否允许用Esc键退出SumatraPDFEscToExit=false//是否用现有窗口......
  • 深入理解JSON对象
    看了js高级程序设计这本书关于json的讲解,下面我把里面我认为比较重要的知识提炼出来,一方面给帮助自己理解,同时也分享给有需要的朋友json:是一种数据格式,不是一种编程语言jso......