当前位置:首页 > JavaScript

js 实现下载文件

2026-01-30 16:33:41JavaScript

使用 a 标签下载文件

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

const downloadFile = (url, filename) => {
  const link = document.createElement('a');
  link.href = url;
  link.download = filename || 'file';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};
// 调用示例
downloadFile('https://example.com/file.pdf', 'document.pdf');

通过 Blob 对象下载动态内容

将文本或二进制数据转换为 Blob 对象生成下载链接,适合动态生成的文件内容。

const downloadTextAsFile = (content, filename, mimeType = 'text/plain') => {
  const blob = new Blob([content], { type: mimeType });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = filename || 'file.txt';
  document.body.appendChild(link);
  link.click();
  setTimeout(() => {
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }, 100);
};
// 调用示例
downloadTextAsFile('Hello, world!', 'example.txt');

下载二进制文件(如图片、PDF)

通过 fetch 获取文件并转换为 Blob 对象下载。

const downloadBinaryFile = async (url, filename) => {
  const response = await fetch(url);
  const blob = await response.blob();
  const objectUrl = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = objectUrl;
  link.download = filename || url.split('/').pop();
  document.body.appendChild(link);
  link.click();
  setTimeout(() => {
    document.body.removeChild(link);
    URL.revokeObjectURL(objectUrl);
  }, 100);
};
// 调用示例
downloadBinaryFile('https://example.com/image.png', 'photo.png');

处理跨域资源下载

若资源跨域且服务器未设置 CORS,可通过后端代理或服务端转发实现下载。

js 实现下载文件

注意事项

  • download 属性受同源策略限制,跨域文件可能无法正确命名。
  • 动态生成的 Blob URL 需通过 URL.revokeObjectURL 释放内存。
  • 大文件下载建议使用分块或流式处理。

标签: 文件js
分享给朋友:

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

实现.vue文件

实现.vue文件

创建Vue单文件组件 Vue单文件组件(.vue文件)是Vue.js框架的核心特性之一,它将模板、脚本和样式封装在一个文件中。一个典型的.vue文件结构包含三个部分:<template>、…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…