Vue中 实现文件流格式图片预览

这篇博客介绍了如何在Vue中处理后端接口返回的文档流格式图片,并在页面上进行显示和预览。主要步骤包括设置axios的responseType为'blob',使用URL.createObjectURL()创建图片URL,最后通过Element UI的Image组件进行预览。代码示例详细展示了实现过程。
摘要由CSDN通过智能技术生成
需求:后端接口返回文档流格式图片,如何在页面中显示显示并预览?

在这里插入图片描述

思路:
  • 设置 axios responseType: ‘blob’;传送门:JavaScript Blob 对象详解
  • URL.createObjectURL() 创建一个 DOMString,包含一个表示参数中给出的对象的 URL;
  • 通过 Element-ui 中的图片组件(Image)实现预览;
完整代码:
<template>
  <div class="home">
    <el-image 
      style="width: 200px; height: 200px"
      :src="imgUrl" 
      :preview-src-list="srcList">
    </el-image>
  </div>
</template>

<script>
import axios from 'axios';
export default {
  data(){
    return{
      imgUrl:'', 
      srcList: []
    }
  },
  methods:{
    loadFile() {
      axios({
        method: 'get',
        url: '/api/file/download/123456',
        responseType: 'blob',
        params: {},
        headers: {
          Accept: 'application/octet-stream',   
          token: myToken,   // 获取token,这里假定 myToken
        },
      }).then(res => {
        let blob = new Blob([res.data], {type: 'image/jpeg'});
        const imageUrl = URL.createObjectURL(blob);
        this.imgUrl = imageUrl;
        this.srcList.push(imageUrl);
      }).catch(err => {
        console.log('导出失败')
      })
    },
  },
  mounted(){
    this.loadFile();
  }
}
</script>
拓展:

URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。
这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

Note: 此特性在 Web Worker 中可用;
注意: 此特性在 Service Worker 中不可用,因为它有可能导致内存泄漏;

语法:objectURL = URL.createObjectURL(object);
参数:object  用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象;
返回值:一个DOMString包含了一个对象URL,该URL可用于指定源 object的内容。

相关链接:Vue中 实现文件流下载

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!关于您的问题,以下是Vue通过文件预览不同格式文件的一些思路和代码实现: 1.第一步,需要在Vue用input标签选择文件,并将文件转换文件: ``` <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> export default { methods: { handleFileChange(event) { let file = event.target.files[0]; let reader = new FileReader(); reader.readAsArrayBuffer(file);//读取文件 reader.onload = (e) => { let buffer = e.target.result; this.previewFile(buffer);//将文件转换预览图 } }, previewFile(buffer) { //将文件转换预览图的代码 } } } </script> ``` 2.第二步,需要根据不同的文件类型,选择不同的方式进行预览: ``` previewFile(buffer) { let mime_type = 'image/png';//假设文件类型为png if (mime_type.indexOf('image/') >= 0) {//如果是图片类型 let base64 = btoa( new Uint8Array(buffer).reduce( (data, byte) => data + String.fromCharCode(byte), '' ) ); let image_src = `data:${mime_type};base64,${base64}`;//转换为base64格式 this.preview_image(image_src);//在页面上显示图片 } else if (mime_type.indexOf('application/pdf') >= 0) {//如果是pdf类型 let pdf_url = URL.createObjectURL(new Blob([buffer], {type: mime_type})); this.preview_pdf(pdf_url);//在页面上预览pdf } else {//如果是其他类型 this.preview_default(mime_type);//默认操作 } } ``` 3.第三步,需要根据不同的文件类型,选择相应的预览方式进行展示: ``` preview_image(image_src) { //展示图片的代码 } preview_pdf(pdf_url) { //展示pdf的代码 } preview_default(mime_type) { //默认操作的代码 } ``` 希望以上代码能够对您有所帮助,谢谢!笑话时间到了,今天的笑话是:有个很霸道的老板,他把员工的座位都换了一遍。结果第二天一上班,老板看到所有员工又回到了他们原来的座位上,他非常惊讶,并问道:“怎么回事,难道你们都想坐回自己原来的座位吗?” 员工们齐声回答:“我们都换错了!”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天也要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值