当前位置:首页 > JavaScript

js下载功能实现

2026-04-03 23:51:12JavaScript

使用<a>标签下载

通过创建带有download属性的<a>标签实现文件下载,适用于已知文件URL或Blob数据:

const downloadFile = (url, filename) => {
  const link = document.createElement('a');
  link.href = url;
  link.download = filename;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};

通过Blob对象下载

处理动态生成的内容时,可将其转换为Blob后下载:

js下载功能实现

const downloadText = (content, filename) => {
  const blob = new Blob([content], { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  downloadFile(url, filename);
  URL.revokeObjectURL(url);
};

使用Fetch API下载

从远程服务器获取文件时,通过Fetch API处理跨域和认证问题:

js下载功能实现

const fetchAndDownload = async (url, filename) => {
  const response = await fetch(url);
  const blob = await response.blob();
  const objectUrl = URL.createObjectURL(blob);
  downloadFile(objectUrl, filename);
  setTimeout(() => URL.revokeObjectURL(objectUrl), 100);
};

大文件分块下载

处理大文件时可使用流式下载避免内存溢出:

const downloadLargeFile = async (url, filename) => {
  const response = await fetch(url);
  const reader = response.body.getReader();
  const chunks = [];

  while(true) {
    const { done, value } = await reader.read();
    if(done) break;
    chunks.push(value);
  }

  const blob = new Blob(chunks);
  downloadFile(URL.createObjectURL(blob), filename);
};

进度显示实现

添加下载进度监控功能:

const downloadWithProgress = (url, filename) => {
  return new Promise((resolve) => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob';

    xhr.onprogress = (e) => {
      if(e.lengthComputable) {
        const percent = Math.round((e.loaded / e.total) * 100);
        console.log(`下载进度: ${percent}%`);
      }
    };

    xhr.onload = () => {
      if(xhr.status === 200) {
        const blob = xhr.response;
        downloadFile(URL.createObjectURL(blob), filename);
        resolve();
      }
    };

    xhr.send();
  });
};

注意事项

  • 跨域请求需服务器配置CORS头部
  • iOS Safari对程序触发的下载有限制
  • 部分浏览器可能阻止多文件自动下载
  • 大文件下载建议添加超时和错误处理

标签: 功能js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…