在现代网页开发中,文件下载是一个常见的需求。JavaScript 提供了多种方法来实现文件的下载,以下是 14 种常用的方法和示例代码。

1. 使用 a 标签的 download 属性

<a href="path/to/file.txt" download="myfile.txt">下载文件</a>

这个方法是最简单的,创建一个带有 download 属性的链接,用户点击后文件就会开始下载。

2. 使用 Blob 和 URL.createObjectURL

const data = new Blob(['Hello World'], { type: 'text/plain' });
const url = URL.createObjectURL(data);
const a = document.createElement('a');
a.href = url;
a.download = 'hello.txt';
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(url);

使用 Blob 对象可以动态创建文件内容,并通过 URL.createObjectURL 生成文件下载链接。

3. Fetch API 结合 Blob

fetch('path/to/file.txt')
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'file.txt';
    a.click();
    URL.revokeObjectURL(url);
  });

通过 Fetch API 获取文件,转换为 Blob,然后创建下载链接。

4. XMLHttpRequest 下载

const xhr = new XMLHttpRequest();
xhr.open('GET', 'path/to/file.txt', true);
xhr.responseType = 'blob';
xhr.onload = function () {
  const url = URL.createObjectURL(xhr.response);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'file.txt';
  a.click();
  URL.revokeObjectURL(url);
};
xhr.send();

使用 XMLHttpRequest 下载文件,设置 responseTypeblob

5. 使用 Canvas 转换为图片文件

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.fillStyle = 'red';
ctx.fillRect(0, 0, 100, 100);
canvas.toBlob(blob => {
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'canvas.png';
  a.click();
  URL.revokeObjectURL(url);
});

可以将 Canvas 内容转换为 Blob,然后下载为图片文件。

6. 使用 PDF.js 生成 PDF 并下载

const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.text('Hello world!', 10, 10);
doc.save('sample.pdf');

利用 jsPDF 库生成 PDF 文件并提供下载功能。

7. 生成 ZIP 文件并下载

const JSZip = window.JSZip;
const zip = new JSZip();
zip.file('file.txt', 'Hello World');
zip.generateAsync({ type: 'blob' }).then(content => {
  const url = URL.createObjectURL(content);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'files.zip';
  a.click();
  URL.revokeObjectURL(url);
});

使用 JSZip 库可以将多个文件打包成 ZIP 文件,并实现下载。

8. 利用 FileSaver.js 保存 Blob

const blob = new Blob(['Hello World'], { type: 'text/plain' });
saveAs(blob, 'hello.txt');

使用 FileSaver.js 库简化文件保存和下载操作。

9. 通过 iframe 下载

<iframe id="download-iframe" style="display:none;"></iframe>
<script>
  const download = (url) => {
    const iframe = document.getElementById('download-iframe');
    iframe.src = url;
  }
  download('path/to/file.txt');
</script>

利用隐形的 iframe 元素触发下载。

10. 复制到剪贴板

const text = 'Hello, World!';
navigator.clipboard.writeText(text).then(() => {
  console.log('文本已复制到剪贴板!');
});

虽然不是真正的文件下载,但可以方便地将文本内容复制到剪贴板。

11. Blob URL 和 纯文本下载

const text = '这是一个下载的文本文件';
const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'textfile.txt';
a.click();
URL.revokeObjectURL(url);

将纯文本创建为 Blob 并下载。

12. 下载 JSON 文件

const jsonData = { name: "张三", age: 30 };
const blob = new Blob([JSON.stringify(jsonData, null, 2)], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'data.json';
a.click();
URL.revokeObjectURL(url);

通过 Blob 创建 JSON 文件并下载。

13. 通过 POST 方法下载文件

fetch('path/to/download', {
  method: 'POST',
  body: JSON.stringify({ data: 'some data' }),
  headers: { 'Content-Type': 'application/json' }
})
.then(response => response.blob())
.then(blob => {
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'file.txt';
  a.click();
  URL.revokeObjectURL(url);
});

通过 POST 请求获取文件后下载。

14. 下载 HTML 文件

const htmlContent = '<html><body><h1>Hello World</h1></body></html>';
const blob = new Blob([htmlContent], { type: 'text/html' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'file.html';
a.click();
URL.revokeObjectURL(url);

以上是各种 JavaScript 文件下载的方法,每种方法都有其适用场景。在实际应用中,开发者可以根据需求选择合适的方式实现文件下载。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部