跳转到内容
返回

关于前端下载

关于本文

记录如何在前端来下载文件的几种解决方案

正文

关于前端下载文件,有两种方案:

代码演示

以下示范的后端代码

router.get("/dolFile", function (req, res, next) {
  const ops = {
    "Content-Type": "image/png",
  };
  res.status(200).sendFile(path.join(__dirname, "p-1.jpg"));
});

不发送请求

<button id="btn">下载</button>
<script>
  // 获取下载按钮
  const dolBtn = document.querySelector("#btn");
  // 下载函数
  const dolFile = url => {
    // 创建a标签
    const a = document.createElement("a");
    // 为a标签设置请求地址和下载属性
    a.setAttribute("href", url);
    // 该参数提供一个值 为该文件保存的默认名
    a.setAttribute("download", "图片");
    // 添加到页面
    document.body.appendChild(a);
    // 点击该a标签进行下载
    a.click();
    // 最后要卸载该dom
    a.remove();
  };
  dolBtn.addEventListener("click", () => {
    dolFile("http://localhost:3000/api/dolFile");
  });
</script>

发送请求

<button id="btn">下载</button>
<script>
  // 获取下载按钮
  const dolBtn = document.querySelector("#btn")
  // 下载函数
  const dolFile = (url) => {
      let data = await fetch('http://localhost:3000/api/dolFile')
        .then(res => {
          // 直接返回一个blob即可
          return res.blob()
        })
      var a = document.createElement('a');
      //文件的名称为时间戳加文件名后缀
      a.download = `${+new Date()}.jpg`;
      // 创建一个blob链接 理解成类似base64那样的
      a.href = URL.createObjectURL(data);
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
  }
  dolBtn.addEventListener('click', () => {
    dolFile('http://localhost:3000/api/dolFile')
  })
</script>

其他

关于Blob

URL对象

关于fetch



上一篇
iterm2-配置
下一篇
ios-date构造函数