当前位置:首页 > JavaScript

js实现浏览器下载文件

2026-01-31 11:33:43JavaScript

使用 a 标签下载文件

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

js实现浏览器下载文件

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 返回的二进制数据)的场景。

js实现浏览器下载文件

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 释放资源。

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

相关文章

vue实现文件进度

vue实现文件进度

Vue 实现文件上传进度 使用 Vue 实现文件上传进度可以通过结合 axios 或原生 XMLHttpRequest 的进度事件来实现。以下是两种常见方法: 使用 axios 上传文件并显示进度…

vue前端实现文件下载

vue前端实现文件下载

使用 window.open 直接下载 通过 window.open 直接打开文件链接触发下载,适用于简单的文件下载场景。 将文件 URL 作为参数传入,浏览器会自动处理下载行为: window.o…

vue实现拖动文件移动

vue实现拖动文件移动

Vue 实现文件拖动移动 实现文件拖动移动功能通常涉及 HTML5 的拖放 API 和 Vue 的事件处理。以下是具体实现方法: 基础拖放实现 在 Vue 组件中设置拖放区域并处理相关事件:…

vue实现打印文件流

vue实现打印文件流

Vue 实现打印文件流 在 Vue 中实现打印文件流(如 PDF、图片或其他二进制数据)通常涉及接收后端返回的文件流,将其转换为可打印的格式,并调用浏览器的打印功能。以下是具体实现方法: 接收文件流…

vue实现word文件预览

vue实现word文件预览

vue实现word文件预览的方法 在Vue项目中实现Word文件预览,可以通过以下几种方式: 使用mammoth.js库 mammoth.js是一个将.docx文件转换为HTML的JavaScrip…

vue实现各类文件预览

vue实现各类文件预览

文件预览实现方案 在Vue中实现文件预览功能需要根据文件类型选择不同的技术方案。以下是常见文件类型的预览方法: 图片文件预览 使用HTML5的FileReader API读取图片文件并显示: &l…