如何在Javascript中实现文件上传和下载功能?

在 JavaScript 中实现文件上传和下载主要靠 XMLHttpRequest 对象。

文件上传:

  1. 创建表单,method 设置为 post,enctype 设置为 multipart/form-data:
html
<form id="uploadForm" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">上传</button>
</form>
  1. 监听表单提交事件,发送 AJAX 请求:
js
document.getElementById('uploadForm').addEventListener('submit', function(e) {
  e.preventDefault();
  var formData = new FormData(this);
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/upload');
  xhr.send(formData);
});
  1. 后端接收文件数据,保存到服务器。

文件下载:
1)点击下载链接时,发送 AJAX 请求到后端下载路径。

document.querySelector('.download-link').addEventListener('click', function() {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', '/file/path');
  xhr.responseType = 'blob';
  xhr.send();
});

2)获取响应内容,转为 Blob 对象或 URL。

js 
xhr.onload = function() {
  if (xhr.status === 200) {
    var blob = xhr.response;
    // 或者生成文件 URL
    var fileURL = URL.createObjectURL(xhr.response);
  }
}

3) 将 Blob 对象生成 URL,设置到 <a> 元素 href 属性,实现点击下载。或者直接使用文件 URL 访问。
4) 后端返回文件内容。

所以,总结来说文件上传下载主要通过 XMLHttpRequest 对象实现:

文件上传:

  1. 创建 method 为 post 且 enctype 为 multipart/form-data 的表单。
  2. 监听表单提交,发送 AJAX 请求发送表单数据。
  3. 后端接收数据,保存文件。

文件下载:

  1. 发送 AJAX 请求到下载路径。
  2. 获取响应 Blob 对象或生成文件 URL。
  3. 设置到 <a> 元素实现下载,或者直接访问文件 URL。
  4. 后端返回文件内容。