zoukankan      html  css  js  c++  java
  • post请求下载文件,获取Content-Disposition文件名

    1、post下载文件代码,doload方法

    import request from "../../src/utils/request";
    import { API } from "../../constants/API";
    import axios from "axios"
    import { Modal } from "antd";
    /**
     * 生成CSR
     * @param {*} data
     */
    export function getCsr(data) {
        return request(API.GET_CSR, { data });
        
      }
    export function download(url, params, fileName) {
        return new Promise((resolve, reject) => {
            axios.post(
                url,
                {...params},
                {responseType: 'blob'}
            )
            .then(res => {
                let reader = new FileReader();
                let data = res.data;
                reader.onload = e => {
                    if (e.target.result.indexOf('Result') != -1 && JSON.parse(e.target.result).Result == false) {
                        // 进行错误处理
                    } else {
                        if (!fileName) {
                            let contentDisposition = res.headers['content-disposition'];
                            if (contentDisposition) {
                                fileName = window.decodeURI(res.headers['content-disposition'].split('=')[1], "UTF-8");
                            }
                        }
                        executeDownload(data, fileName);
                    }
                };
                reader.readAsText(data);
                resolve(res.data);
            })
        });
    }
    export function executeDownload(data, fileName) {
      if (!data) {
          return
      }
      let url = window.URL.createObjectURL(new Blob([data]));
      let link = document.createElement('a');
      link.style.display = 'none';
      link.href = url;
      link.setAttribute('download', fileName);
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
      Modal.success({
        title: "操作成功",
        okText:"确定",
        content: "生成CSR成功!请注意下载文件!",
        onOk: () => {}
      })
    }
    
      
    

    2、如何获取后端传过来的名字,后端需要设置如下:

    Access-Control-Expose-Headers : 'Content-Disposition'
    

    3、注意点后台Content-Disposition,需要配合 application/octet- stream

  • 相关阅读:
    保障升级:Splashtop 公布安全顾问委员会成员
    Android Studio gradle-5.4.1
    C++__静态成员
    网络嗅探及协议分析-wireshark
    网络嗅探及协议分析-tcpdump
    Linux基本安全防护技术
    C++__动态对象
    C++___深浅拷贝
    C++____函数重载
    C++__函数的默认参数和占位
  • 原文地址:https://www.cnblogs.com/iwen1992/p/12935989.html
Copyright © 2011-2022 走看看