当前位置:首页 > JavaScript

js实现浏览器下载文件

2026-01-31 11:33:43JavaScript

使用 a 标签下载文件

通过创建 a 标签并设置 download 属性实现下载。适用于已知文件 URL 且无需额外处理的情况。

const downloadFile = (url, filename) => {
  const a = document.createElement('a');
  a.href = url;
  a.download = filename || 'downloaded-file';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

使用 fetch 和 Blob 下载

适用于需要动态获取文件内容(如 API 返回的二进制数据)的场景。

const downloadFromApi = async (url, filename) => {
  const response = await fetch(url);
  const blob = await response.blob();
  const blobUrl = window.URL.createObjectURL(blob);

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

  window.URL.revokeObjectURL(blobUrl);
  document.body.removeChild(a);
};

下载文本内容

直接通过 Blob 将文本内容转为文件下载。

const downloadText = (content, filename) => {
  const blob = new Blob([content], { type: 'text/plain' });
  const blobUrl = window.URL.createObjectURL(blob);

  const a = document.createElement('a');
  a.href = blobUrl;
  a.download = filename || 'text-file.txt';
  document.body.appendChild(a);
  a.click();

  window.URL.revokeObjectURL(blobUrl);
  document.body.removeChild(a);
};

处理跨域问题

若文件资源跨域且服务器未设置 CORS 头,需通过代理或后端中转下载。

// 后端示例(Node.js Express)
app.get('/download-proxy', async (req, res) => {
  const { url } = req.query;
  const response = await axios.get(url, { responseType: 'stream' });
  response.data.pipe(res);
});

// 前端调用
downloadFile('/download-proxy?url=' + encodeURIComponent(fileUrl));

注意事项

  • download 属性受同源策略限制,跨域文件可能触发浏览器默认行为(如预览而非下载)。
  • 大文件下载建议使用分块或流式处理,避免内存问题。
  • 部分浏览器可能限制 Blob URL 的有效期,需及时调用 revokeObjectURL 释放资源。

js实现浏览器下载文件

标签: 浏览器文件
分享给朋友:

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件实现文件树 递归组件是Vue中实现文件树的常见方法。通过组件自身调用自身,可以处理嵌套的目录结构。 <template> <div>…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

vue实现文件分享

vue实现文件分享

Vue 实现文件分享功能 前端文件上传与展示 使用 Vue 和 Element UI 实现文件上传组件,允许用户选择文件并上传到服务器。 <template> <div>…

vue实现文件导入

vue实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合File API完成。创建一个文件选择组件,监听change事件获取用户选择的文件…

vue实现文件功能

vue实现文件功能

Vue 实现文件上传功能 使用 Vue 实现文件上传功能可以通过原生 HTML 的 <input type="file"> 结合 Vue 的事件处理和 HTTP 请求库(如 Axios)来…

vue 实现文件下载

vue 实现文件下载

使用 window.open 方法 通过 window.open 直接打开文件链接触发下载,适用于已知文件 URL 的情况: window.open('文件URL', '_blank') 使用 &…