文件上传

168 阅读1分钟

1丶上传

  let fileTypeMime = ""; // 文件 mime 类型,移动端必传,否则下载不成功;pc端可传可不传
  switch (
    fileSuffix // 获取后缀对应的 mime
  ) {
    case "png":
      fileTypeMime = "image/png";
      break;
    case "doc":
      fileTypeMime = "application/msword";
      break;
    case "docx":
      fileTypeMime =
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
      break;
    case "jpg":
    case "jpeg":
      fileTypeMime = "image/jpeg";
      break;
    case "gif":
      fileTypeMime = "image/gif";
      break;
    case "svg":
      fileTypeMime = "image/svg+xml";
      break;
    case "tif":
    case "tiff":
      fileTypeMime = "image/tiff";
      break;
    case "txt":
      fileTypeMime = "text/plain";
      break;
    case "ppt":
      fileTypeMime = "application/vnd.ms-powerpoint";
      break;
    case "pptx":
      fileTypeMime =
        "application/vnd.openxmlformats-officedocument.presentationml.presentation";
      break;
    case "xls":
      fileTypeMime = "application/vnd.ms-excel";
      break;
    case "xlsx":
      fileTypeMime =
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
      break;
    case "zip":
      fileTypeMime = "application/zip";
      break;
    case "7z":
      fileTypeMime = "application/x-7z-compressed";
      break;
  }
  // 获取后台返回的 文件名 注意axios 请求拦截器需直接返回 response才可以通过res.headers获取文件名 
  // blob获取文件名 需要后台配置content-disposition
  const hs = data.headers["content-disposition"];
  let fileNameRE = hs.split("=")[1].split(".")[0];
  let fileName = "";
  if (hs) {
    // const reg = /filename=(.*)/;
    // fileName = reg.exec(hs)[1].trim();
    fileName = decodeURIComponent(fileNameRE);
  }
  let blob = window.URL.createObjectURL(
    new Blob([data.data], {
      type: fileTypeMime,
    })
  );
  
  let link = document.createElement("a");
  link.style.display = "none";
  link.href = blob;
  link.setAttribute("download", fileName + fileSuffix);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link); //下载完成移除元素
  window.URL.revokeObjectURL(blob); //释放掉 blob 对象
}

复制代码

2丶axios请求需要设置项

1687228111597.png3丶下载自定义文件名(用于oss下载文件裂开时,常规使用第二步的方法即可) // 下载文件 downLoadUrl(ossUrl, url, name) { // window.open(ossUrl); const fileName = name + url.split("_")[1]; // console.log(fileName,"哈哈哈"); this.startUpLoad(ossUrl, fileName); },

startUpLoad(url, fileName) {
  const x = new XMLHttpRequest();
  x.open("GET", url, true);
  x.responseType = "blob";
  x.onload = function () {
    const url = window.URL.createObjectURL(x.response);
    const a = document.createElement("a");
    a.href = url;
    a.download = fileName;
    a.click();
  };
  x.send();
},