当前位置:首页 > JavaScript

js实现主动下载

2026-03-15 21:07:29JavaScript

使用 window.open 方法

通过 window.open 直接打开文件 URL,浏览器会自动触发下载(若文件类型支持)。适用于简单场景,但可能被浏览器拦截。

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

使用 a 标签模拟点击

动态创建隐藏的 <a> 标签,设置 download 属性并触发点击事件。兼容性较好,适合大多数文件类型。

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

// 调用示例
downloadFile('https://example.com/image.png', 'myImage.png');

使用 Fetch API 处理二进制数据

适用于需要先获取文件内容再下载的场景(如需要添加请求头)。需注意跨域问题。

async function fetchAndDownload(url, filename) {
  const response = await fetch(url);
  const blob = await response.blob();
  const blobUrl = URL.createObjectURL(blob);

  const link = document.createElement('a');
  link.href = blobUrl;
  link.download = filename || 'download';
  document.body.appendChild(link);
  link.click();

  // 清理对象URL
  setTimeout(() => {
    document.body.removeChild(link);
    URL.revokeObjectURL(blobUrl);
  }, 100);
}

// 调用示例
fetchAndDownload('https://example.com/data.csv', 'report.csv');

处理 Base64 数据

直接下载 Base64 编码的文件(如图片或 PDF)。

js实现主动下载

function downloadBase64(content, filename, mimeType) {
  const byteCharacters = atob(content);
  const byteNumbers = new Array(byteCharacters.length);
  for (let i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i);
  }
  const byteArray = new Uint8Array(byteNumbers);
  const blob = new Blob([byteArray], { type: mimeType });

  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = filename;
  link.click();
}

// 调用示例(假设有Base64数据)
const pdfBase64 = 'JVBERi0xLjMK...'; // 截断的Base64示例
downloadBase64(pdfBase64, 'document.pdf', 'application/pdf');

注意事项

  • 跨域限制:若文件在其他域名下,需确保服务器配置 CORS 允许访问。
  • 大文件处理:对于大文件建议使用分块下载或流式处理。
  • 用户交互:部分浏览器要求下载操作必须由用户手势(如点击)触发。

标签: 主动js
分享给朋友:

相关文章

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…