当前位置:首页 > JavaScript

js实现附件下载

2026-03-01 05:52:21JavaScript

使用 window.open 方法

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

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

使用 a 标签模拟点击

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

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
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…