js直接下载附件和通过blob数据类型下载文件

js下载文件方式有使用a标签的,也有直接用window.open的,还有用form表单的;这里采用的是a标签的下载方式,一种是url直接下载,另一种是文件的blob数据类型进行下载。

文件blob数据类型的获取一般是后端返回文件的二进制流,前端通过请求工具获取为blob数据类型进行下载;也可以这直接通过ajax或fetch等将url转化为blob数据类型,一些特殊的附件直接通过url下载,浏览器可能会将其打开,如:pdf。

话不多说直接上代码:

一、url直接下载文件

javascript 复制代码
/**
 * 文件url直接下载
 * @param {String} path 下载链接
 * @param {*} fileName 下载文件名称, 无文件名默认取url后面名称
 */
const downloadUrl = (path, fileName) => {
  if(!path) return;
  const a = document.createElement("a");
  a.setAttribute("href", path);
  a.setAttribute("download", fileName);
  a.setAttribute("target", "_blank");
  const clickEvent = document.createEvent("MouseEvents");
  clickEvent.initEvent("click", true, true);
  a.dispatchEvent(clickEvent);
};

二、文件blob数据类型下载文件

javascript 复制代码
/**
 * 文件blob数据格式进行下载
 * @description 文件下载
 * @param {String} blob  文件blob数据
 * @param {String} fileName 下载文件名
 */
const downloadBlobUrl = function (blob, fileName = "") {
  if (!blob) return;
  if ("download" in document.createElement("a")) {
    // 非IE下载
    let link = document.createElement("a");
    if (window.URL) {
      link.href = window.URL.createObjectURL(blob);
    } else {
      link.href = window.webkitURL.createObjectURL(blob);
    }
    link.download = fileName;
    document.body.appendChild(link);
    link.click();
    link.remove();
  } else {
    // IE10+下载
    navigator.msSaveBlob(blob, fileName);
  }
};

需要的上方自取,有疑问或者其他问题欢迎评论沟通,也可加wx沟通账号与用户名一致

相关推荐
bobo-rs25 天前
Go语言操作文件上传和下载应用教程
开发语言·golang·iphone·文件上传·文件下载·go文件
代码星辰1 个月前
功能实现——通过阿里云 OSS 实现文件管理
阿里云·文件上传·oss·文件下载
yimtcode3 个月前
HTTP文件下载
http·文件下载·http下载
键盘被我撸冒烟了5 个月前
SpringMVC中的文件上传和中英文名称文件下载
java·eclipse·mvc·异常处理·文件上传·文件下载
谷哥的小弟6 个月前
Spring MVC文件下载配置
配置·spring mvc·状态码·响应头·responseentity·httpheaders·文件下载
千寻物语8 个月前
Angular封装HttpClient文件下载
angular.js·httpclient·文件下载
Sun 32859 个月前
SpringMVC:Ajax、拦截器、文件上传、文件下载
java·spring·ajax·springmvc·文件上传·拦截器·文件下载