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

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

js实现类

js实现类

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…