zoukankan      html  css  js  c++  java
  • 下载文件的Restful接口的前端实现

    背景介绍

      后端是springboot框架,接口是restful风格接口,需求是异步实现一个文件下载,该文件是动态生成的,以流的方式返回给前端。存在的问题是,ajax不支持post方式传参数,并触发浏览器下载文件。经过多方调研,JavaScript原生XMLHttpRequest()对象可以实现。这里呈现主要的前端代码,以供参考,具体请参考XMLHttpRequest()的API文档介绍https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

    实现代码

    1、实现函数方法

     1 function download(options) {
     2         var xhr = new XMLHttpRequest();//创建新的XHR对象
     3         xhr.open(options.method, options.url);//指定获取数据的方式和url地址
     4         xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
     5         xhr.responseType = 'blob';//以blob的形式接收数据,一般文件内容比较大
     6         // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
     7         xhr.onload = function () {
     8             // 请求完成
     9             if (this.status === 200) {
    10                 // 请求成功
    11                 var blob = this.response;
    12                 var reader = new FileReader();
    13                 reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a表情href
    14                 reader.onload = function (e) {
    15                     // 转换完成,创建一个a标签用于下载
    16                     var a = document.createElement('a');
    17                     a.download = 'backendCode.zip';//下载的文件名
    18                     a.href = e.target.result;
    19                     $("body").append(a);    // 修复firefox中无法触发click
    20                     a.click();
    21                     $(a).remove();
    22                 }
    23             }
    24         };
    25         xhr.send(options.data); //post请求传的参数
    26     }

    2、参数设置

    1 var options = {
    2                 url: '/geneCode',  //下载地址
    3                 data: requestDataStr, //要发送的数据
    4                 method: 'post'//post方式发送数据
    5             };

    3、数据对象。

    数据对象需要转换成字符串类型,后端才可以反序列化,映射到指定的javabean。

    1 var javaBean = {
    2                 author: “Eric”
    3             }
    4 var requestDataStr = JSON.stringify(javaBean);    

    结果

      在触发下载的函数中,引用该函数,即可实现post方式异步下载文件,触发浏览器的文件下载过程

     
  • 相关阅读:
    今天写一篇随想,也当是回顾过去,展望未来吧。
    推荐 Word、EXCEL必备工具箱
    elasticsearch Routing 路由详解
    Python学习之字典
    ES 分片和副本数 调整及数据写入、重建索引调优
    fastJson JSON.parseObject()丢失字符串原本顺序
    Python 列表(详)
    pycharm常用快捷键
    Python学习笔记二(列表)
    python学习笔记二
  • 原文地址:https://www.cnblogs.com/aric2016/p/10443060.html
Copyright © 2011-2022 走看看