文件下载方法(直接下载与请求下载)

 

直接下载:适用于简单场景,不发送请求直接使用浏览器获取文件

/**
 * @description: 下载图片/文件
 * @return {*}
 */
export const download = (url = '', newUrl) => {
  const iframe = document.createElement('a');
  if (newUrl) {
    iframe.href = newUrl;
  } else {
    iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;
  }
  iframe.download = document.cookie ? document.cookie.split('; ') : [];
  document.querySelector('body').appendChild(iframe);
  iframe.click();
  document.querySelector('body').removeChild(iframe);
};

 

发送请求get/post:适合复杂的下载场景

export const filterexport = ({url = '', params, fun,method="post"}) => {
  function getFileName(fileName, response) {
    // 需要响应设置此header暴露给外部,才能获取到
    let contentDisposition = response.headers['content-disposition'];
    if (contentDisposition) {
      // 正则获取filename的值
      let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
      let matches = filenameRegex.exec(contentDisposition);
      if (matches != null && matches[1]) {
        fileName = matches[1].replace(/['"]/g, '');
      }
      // 通过 URLEncoder.encodeURIComponent(pFileName, StandardCharsets.UTF_8.name()) 加密编码的, 使用decodeURIComponent(fileName) 解密
      //   fileName = decodeURIComponent(fileName)
      // 通过 new String(pFileName.getBytes(), StandardCharsets.ISO_8859_1) 加密编码的, 使用decodeURIComponent(escape(fileName)) 解密

      var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
      if (userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') == -1) {
        return fileName;
      }
      fileName = decodeURIComponent(escape(fileName));
    }
    return fileName;
  }

  let useUrl = '';
  // iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;
  useUrl = (window.DCIMAPP.downloadPrefix || '') + url;
  if (useUrl[0] == '/') useUrl = useUrl.substr(1);
  axios({
    url: window.DCIMAPP.bpmDomain + useUrl,
    method: method,
    formateResponse: () => {
      return false;
    },
    handleResponse: (res, code, response) => {
      return response;
    },
    responseType: 'blob',
    data: params,
  }).then((res) => {
    if (res.data.type.split('/')[1] == 'json') {
      const reader = new FileReader();
      reader.readAsText(res.data, 'utf-8');
      reader.onload = () => {
        res = JSON.parse(reader.result);
        if (res.code && res.code !== 100000) {
          prompt.warn(res.msg);
        }
      };
      return;
    } else if (fun && res.data) {
      fun();
      prompt.success(intl.get('7d372ced-178d-485c-a1b1-3538c51700db').d('导出成功'));
    }
    const iframe = document.createElement('a');
    let url = window.URL.createObjectURL(new Blob([res.data]));
    let fileName = '';
    fileName = getFileName(fileName, res);
    iframe.download = fileName;
    iframe.href = url;
    document.querySelector('body').appendChild(iframe);
    iframe.click();
    document.querySelector('body').removeChild(iframe);
  });
};

 

posted @ 2024-11-05 14:24  SimoonJia  阅读(48)  评论(0编辑  收藏  举报