前端接收数据流实现图片预览效果--ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据

news/2024/7/19 14:01:29 标签: vue, js

当我们上传附件的时候,还伴随这文件的预览的下载功能
文件预览
想实现文件预览首先,思考到显示图片而已,jquery ajax直接get请求 将返回data 赋值给img标签的src属性即可,but,普通的请求类型并不能请求成功
返回的数据是这种情况
在这里插入图片描述

原因 后端反我们的二进制流数据,需要xmlhttprequest 2 标准中支持流文件的,并且应该使用 xhr.response作为返回 而不是responseText。

// 发送get请求,接收后端返回的文件流

export function getFile(params, url) {
  return request({
    url: url,
    method: 'get',
    responseType: 'blob',   //这是重点
    params,
  })
}

//调用接口

    gets(id) {
      getFile({ id: id }, '/common/preview').then(res => {
        let src = window.URL.createObjectURL(res)//将查出的数据转换为图片路径
        this.logpic = src;
        this.imgVisible = true
      }).catch(() => { })
    },

上面只合适图片的,还可能想预览pdf格式的

      getFile({ id: item.uid }, '/common/preview').then(res => {
        const binaryData = [];
        binaryData.push(res);
        // console.log(binaryData);
        //获取blob链接
        var pdfUrl = window.URL.createObjectURL(new Blob(binaryData, { type: 'application/pdf' }));
        window.open(pdfUrl);
        // this.$router.push({ 'path': '/pdf', query: { url: Base64.encode(src) } })
      }).catch(() => { })
    },

无论后端返回的是图片还是pdf都能获取到,将获取的URL展示到页面
在这里插入图片描述
在这里插入图片描述

文件下载
与文件预览同理(关于有pdf的文件流接收)

    downloadFile(item) {
      getFile({ id: item.uid }, '/common/preview').then(res => {
        const binaryData = [];
        binaryData.push(res);
        //获取blob链接
        var pdfUrl = window.URL.createObjectURL(new Blob(binaryData, { type: 'application/pdf' }));
        let a = document.createElement('a')
        a.href = pdfUrl // 这里的请求方式为get,如果需要认证,接口上需要带上token
        a.download = item.name
        a.click()
        this.$message.success('下载成功!')
      }).catch(() => { })
    }

http://www.niftyadmin.cn/n/874739.html

相关文章

html a标签链接 点击下载文件

通常在咱们写项目的时候会遇到附件上传、下载功能&#xff0c;在上传完文件后会把文件的路径发送给后端保存到数据库里以便下载&#xff0c;如果不通过后台直接下载的话&#xff0c;可以把文件路径给a标签的属性href&#xff0c;就可以实现下载 <a href"文件路径"…

水位传感器的python代码_关于水的作文

每到春天&#xff0c;红得如火的木棉花&#xff0c;粉得如霞的芍药花&#xff0c;白得如玉的月季花竞相开放。下面是小编整理的春水的作文&#xff0c;希望对大家有帮助&#xff01;关于春水的作文1二月&#xff0c;寒冷的威力已在衰竭&#xff0c;春姑娘不知不觉来到了我们的身…

Vue-router 中hash模式和history模式的区别

咱们今天说说VUE路由的hash模式与history模式的区别&#xff0c;这个也是面试常问的问题&#xff0c;不要小看这道题其实问到这里的时候那个面试官应该是个大牛&#xff0c;开发经验丰富&#xff0c;这个题其实就是考验你的开发经验是否属实。 咱们来看看小白的回答。 小白回答…

浪潮服务器u盘装机步骤_用U盘PE启动安装系统教程

本教程讲述如何通过优启通制作U盘PE启动盘来安装纯净无捆绑的系统镜像&#xff0c;U盘装系统的优点在于灵活性更强兼容性更好&#xff0c;支持BIOSMBR和EFIGPT下安装&#xff0c;即使原系统启动不了也能装。下面以安装装机工作室Win10系统为示例作演示&#xff0c;此方法也适用…

linux mysql 关闭ssl_MySql 关闭ssl

查看是否启用$ mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.12 MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved…

http的“无连接”指的是_一份TCP、HTTP面试指南,常考点都给你了

来自&#xff1a;掘金&#xff0c;作者&#xff1a;白伟业链接&#xff1a;https://juejin.im/post/6844903592164343821TCP要说http就绕不开tcp&#xff0c;TCP协议对应于传输层&#xff0c;而HTTP协议对应于应用层&#xff0c;从本质上来说&#xff0c;二者没有可比性。但是&…

HTTP跨域请求的发两次的原因

开发项目当中&#xff0c;发现了一个请求发送了两次&#xff0c;很奇怪&#xff0c;我只调用了一次啊&#xff0c;在浏览器中查却是调用了两次 查了查百度搜到下面这段&#xff0c;顺便记录一下 浏览器的同源策略 就是出于安全考虑&#xff0c;浏览器会限制从脚本发起的跨域H…

python 图像mode是什么_骚操作 | 用 Python 实现 GIF 倒放

简介 提到 GIF&#xff0c;大家应该都比较熟悉&#xff0c;它与 JPG、PNG 等文件格式一样&#xff0c;可用于制作静态图像&#xff0c;但是 GIF 格式还具有一项独有技能&#xff1a;可以用于创建动态图像。不知大家有没有想过&#xff1a;如果将 GIF 倒放会是一种怎么样的景象&…