当前位置:首页 > 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 释放资源。

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

相关文章

旋转相册制作css文件

旋转相册制作css文件

旋转相册制作CSS文件 旋转相册通常通过CSS动画和3D变换实现,以下是一个完整的CSS文件示例,用于创建一个3D旋转相册效果。 基础HTML结构 在CSS文件之前,需确保HTML结构包含相…

vue实现文件管理系统

vue实现文件管理系统

Vue 文件管理系统实现方案 核心功能模块设计 文件展示组件:使用树形结构展示目录层级,配合递归组件实现无限嵌套 上传下载功能:通过axios与后端API交互,支持拖拽上传和分片上传 权限控制系统:基…

vue前端实现文件预览

vue前端实现文件预览

Vue 前端实现文件预览的方法 图片预览 使用 <input type="file"> 结合 URL.createObjectURL() 实现本地图片预览: <template&g…

vue文件下载怎么实现

vue文件下载怎么实现

使用 <a> 标签下载文件 在 Vue 中可以通过动态生成 <a> 标签实现文件下载。创建一个隐藏的 <a> 标签,设置 href 为文件 URL 并添加 down…

js代码实现vue文件

js代码实现vue文件

使用 JavaScript 解析和生成 Vue 文件 Vue 文件(.vue)通常包含模板、脚本和样式三部分。以下是使用 JavaScript 解析和生成 Vue 文件的方法。 解析 Vue 文件…

react如何打开文件

react如何打开文件

使用文件输入元素 在React中打开文件通常通过HTML的<input type="file">元素实现。创建一个受控组件,通过onChange事件获取用户选择的文件。 import R…