vue后台返回格式为二进制流进行文件的下载方式

目录
  • 后台返回格式为二进制流进行文件的下载
    • 结合项目中
    • 具体文件使用
  • vue下载保存二进制文件
    • 方法封装:util.js
    • 请求接口
    • 方法调用

后台返回格式为二进制流进行文件的下载

结合项目中

封装get请求携带token,进行接收二进制流

export function getHeader() {
    const token = getToken();
    if (token) {
        return {
            headers: {
                "Authorization": "Bearer " + token,
            }
        }
    }
    return {
        headers: {}
    }
}
 
export function getHeader() {
    const token = getToken();
    if (token) {
        return {
            headers: {
                "Authorization": "Bearer " + token,
            }
        }
    }
    return {
        headers: {}
    }
}

具体文件使用

TaskManageServer.js文件:

export const dataExport2  = (vueObject, dataIdList) =>  getDataRaw(vueObject,dataExport1(dataIdList))
 
export const dataExport1 = (dataIdList)=> {
    var tmp ="";
    for (let i = 0; i <dataIdList.length; i++) {
        tmp+= dataIdList[i]+","
    }
    tmp = tmp.substr(0,tmp.length-1)
    var url = getUrl('image/export/' + tmp);
    return url;
}

对应html文件具体使用:

 import {
        dataExport1,
        dataExport2
    } from './TaskManageServer'
const response = await dataExport2(this, this.dataIdList);
let blob = new Blob([response.data], {
    //下载的文件类型;
    type: 'application/zip' 
})
// let fileName = Date.parse(new Date()) + '.zip'(修改下载的文件名)
if (window.navigator.msSaveOrOpenBlob) {
    // navigator.msSaveBlob(blob, fileName)
    navigator.msSaveBlob(blob)
} else {
    var link = document.createElement('a')
    link.href = window.URL.createObjectURL(blob)
    // link.download = fileName
    link.click()
    window.URL.revokeObjectURL(link.href) //释放内存
}

即可实现下载二进制流文件。

vue下载保存二进制文件

方法封装:util.js

/**
 * 把二进制文件保存到本地
 */
export function exportFile(file, name) {
  let url = window.URL.createObjectURL(new Blob([file]));
  let link = document.createElement("a");
  link.style.display = "none";
  link.href = url;
  link.setAttribute("download", name);
  document.body.appendChild(link);
  link.click();
 
  document.body.removeChild(link); // 下载完成移除元素
  window.URL.revokeObjectURL(url); // 释放掉blob对象
}

请求接口

在请求头加responseType: "arraybuffer"

export function demoApi(data) {
  return http({
    url: "/path/export",
    method: "post",
    responseType: "arraybuffer",
    data,
  });
}

方法调用

demoApi(data).then(res=>{
    if(res.staus==200){
        let fileName = "";
          let contentDisposition = res.headers["content-disposition"];
          if (contentDisposition) {
            fileName = window.decodeURI(
              res.headers["content-disposition"].split("=")[1],
              "UTF-8"
            );//取文件名
          }
          exportFile(res.data, fileName);
    }
})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决vue下载后台传过来的乱码流的问题

    后台返回的乱码流 解决办法: 请求方式用的是axios,主要加关键的 {responseType: 'blob'} axios封装 export function postDownload(url, data) { return new Promise((resolve, reject) => { instance.post(url,data,{responseType: 'blob'}).then(response => { resolve(response); }, err => {

  • 在vue中使用axios实现post方式获取二进制流下载文件(实例代码)

    需求 点击导出下载表格对应的excel文件 在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api 实现 第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流 responseType: 'blob' 第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实现文件下载功能 let blob = res.data let reader = new FileReader() reader.readAsDataURL(blob) r

  • vue下载二进制流图片操作

    1.应项目要求,后台返回二进制流,而且乱码 2.红色为必须 this.$axios.post('/fishweb/agent/downLoad',this.stringify({filename:'qrCode.jpg'}), { responseType: 'arraybuffer' //指定返回数据的格式为blob }).then((res) => { var src='data:image/jpg;base64,'+ btoa(new Uint8Array(res).reduce((dat

  • vue后台返回格式为二进制流进行文件的下载方式

    目录 后台返回格式为二进制流进行文件的下载 结合项目中 具体文件使用 vue下载保存二进制文件 方法封装:util.js 请求接口 方法调用 后台返回格式为二进制流进行文件的下载 结合项目中 封装get请求携带token,进行接收二进制流 export function getHeader() {     const token = getToken();     if (token) {         return {             headers: {              

  • vue后台返回base64图片无法显示的解决

    目录 vue后台返回base64图片无法显示 解决方法如下 vue中base64转图片格式 vue后台返回base64图片无法显示 关于后台接口返回的图片base64格式页面无法显示的问题,我遇到的原因是因为返回的一串内容里面存在空格或者换行的原因 解决方法如下 let str = `data:image/jpg;base64,${res.imgStr}`         this.mpId = str.replace(/[\r\n]/g, '') let str = `data:image/j

  • Ajax请求二进制流进行处理(ajax异步下载文件)的简单方法

    摘要: ajax请求一个二进制流(文件),转换为Blob进行处理或者下载保存文件 需求 管理后台需要随时下载数据报表,数据要实时生成后转换为excel下载. 文件不大,页面放置"导出"按钮,点击按钮后弹出保存文件对话框保存 说明:第一种方法使用a标签直接可以满足大部分人需求,第二种方法纯粹是在说实现方法以及更好的操作体验,不需要(举一个需要第二种方法的例子:如果生成很慢就需要生成过程中禁用按钮,防止连续生成)用到的可以不用看 解决方案 方法一 请求文件的接口能改为GET则可以使用这种方

  • 微信小程序预览二进制流文件的方法

    微信小程序将后端接口返回的二进制流PDF 文件在线预览,供大家参考,具体内容如下 一.微信小程序的文件系统 微信小程序文件系统参考官方文档:微信小程序文档我们主要是把后端接口获取到的pdf二进制流,下载保存到微信的本地用户文件,下载后预览再删掉,因为本地用户文件每个用户只有200M,所以预览后删掉. 二.小程序实现文件预览 代码如下(示例): //使用登记牌扫码查询         usequercode() {             uni.scanCode({               

  • php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】

    本文实例讲述了php实现不通过扩展名准确判断文件类型的方法.分享给大家供大家参考,具体如下: 第一种方法 通过php的finfo_file() $handle=finfo_open(FILEINFO_MIME_TYPE);//This function opens a magic database and returns its resource. $fileInfo=finfo_file($handle,'./test.txt');// Return information about a f

  • vue使用axios导出后台返回的文件流为excel表格详解

    目录 使用axios导出后台返回的文件流为excel vue axios导出excel乱码解决 使用axios导出后台返回的文件流为excel 之前有一个需求是要使用post请求,导出后台返回的文件流并在表格中使用,大概思路为使用axios请求回数据,定义数据为blob格式,再创建一个a标签自调就可以完成了 <button @click="download">导出</button> data() {     return {       isClick: tru

  • vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)

    vue-cli+axios实现附件上传下载记录: 上传: 这里用formData格式传递参数:请求成功后后台返回上传文件的对应信息. 重点是下载: ############## downloadfile(res) { var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //applicati

  • vue如何实现二进制流文件导出excel

    目录 vue二进制流文件导出excel 前端代码 后端node 关于二进制文件流导出Excel文件的一些坑 实现下载效果 踩坑 vue二进制流文件导出excel 问了一下其他的后端,他们公司前端是a标签,后端是给了一个地址,a标签或者window.open()都可以实现. 我们公司是后端返回的二进制流文件,实现了一下,亲测可以,没有问题 前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta cha

  • Vue+Element ui 根据后台返回数据设置动态表头操作

    由于后端是多人开发,也没有规范数据格式,所有页面是我一个人开发,所以就会遇到同样的页面不同的返回数据格式问题. 一.根据element文档,利用prop属性绑定对应值,label绑定表头. html <el-table class="tb-edit" highlight-current-row :data="tableData" border style="width: 100%"> <template v-for="

随机推荐