当前位置:首页 > 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实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…