当前位置:首页 > JavaScript

js实现附件下载

2026-03-01 05:52:21JavaScript

使用 window.open 方法

通过 window.open 直接打开文件 URL,浏览器会自动触发下载(若文件类型支持)。

js实现附件下载

window.open('https://example.com/file.pdf', '_blank');

使用 a 标签模拟点击

动态创建 <a> 标签,设置 download 属性并触发点击事件。

js实现附件下载

const link = document.createElement('a');
link.href = 'https://example.com/file.pdf';
link.download = 'custom-filename.pdf'; // 可选:指定下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

通过 fetch 下载二进制文件

适用于需要处理文件内容(如添加权限验证)的场景。

fetch('https://example.com/file.pdf')
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = 'file.pdf';
    link.click();
    URL.revokeObjectURL(url); // 释放内存
  });

处理大文件分块下载

通过 Range 请求头实现分块下载并合并。

async function downloadLargeFile(url, filename) {
  const chunkSize = 1024 * 1024; // 1MB分块
  let startByte = 0;
  let endByte = chunkSize;
  const chunks = [];

  while (true) {
    const response = await fetch(url, {
      headers: { 'Range': `bytes=${startByte}-${endByte}` }
    });
    if (!response.ok) break;
    chunks.push(await response.blob());
    startByte = endByte + 1;
    endByte += chunkSize;
  }

  const fullBlob = new Blob(chunks);
  const link = document.createElement('a');
  link.href = URL.createObjectURL(fullBlob);
  link.download = filename;
  link.click();
}

注意事项

  • 跨域限制:若文件在第三方域名,需确保服务器配置 CORS 头(如 Access-Control-Allow-Origin)。
  • 文件名编码:中文文件名需使用 encodeURIComponent 处理。
  • Blob 类型:通过 fetch 下载时,可通过 response.headers.get('Content-Type') 确认文件类型。

示例:带权限验证的下载

fetch('https://example.com/protected-file', {
  headers: { 'Authorization': 'Bearer token123' }
})
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = 'secure-file.pdf';
    link.click();
  });

标签: 附件js
分享给朋友:

相关文章

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…