关于javascript:下载文件并重命名文件名称

3次阅读

共计 1039 个字符,预计需要花费 3 分钟才能阅读完成。

话不多说,间接上菜,请各位大佬提出不同意见

/**
 * @filename <string> 自定义的文件名
 * @url <string> 下载地址
 */
export function renameDownloadFile(filename,url){
  // 获取文件
  getBlob(url).then(blob => {
    // 保留文件
    saveAs(blob, filename);
  })
}
// 重命名下载
export function getBlob(url) {
  // 创立 Promise 对象
  return new Promise(resolve => {
    // 创立 XMLHttpRequest 对象
    const xhr = new XMLHttpRequest();
    // 设置申请形式
    xhr.open('GET', url, true);
    // 设置响应类型
    xhr.responseType = 'blob';
    // 当申请实现时,触发 onload 事件
    xhr.onload = () => {
      // 如果响应状态码为 200,则解析响应
      if (xhr.status === 200) {resolve(xhr.response);
      }
    };
    // 发送申请
    xhr.send();});
}
export function saveAs(blob, filename) {
  // 如果反对 msSaveOrOpenBlob 办法,则应用 msSaveBlob 办法保留文件
  if (window.navigator.msSaveOrOpenBlob) {navigator.msSaveBlob(blob, filename);
  } else {
    // 创立 a 标签
    const link = document.createElement('a');
    // 获取 body 元素
    const body = document.querySelector('body');
    // 设置 a 标签的 href 属性
    link.href = window.URL.createObjectURL(blob);
    // 设置 a 标签的 download 属性
    link.download = filename;
    // 当 a 标签被点击时,触发 onclick 事件
    // fix Firefox
    link.style.display = 'none';
    body.appendChild(link);

    // 点击 a 标签,触发 onclick 事件
    link.click();
    // 销毁 a 标签
    body.removeChild(link);
    // 开释 a 标签的 href 属性
    window.URL.revokeObjectURL(link.href);
  }
}
正文完
 0