JS 使用 Axios 实现文件夹上传

在现代Web应用中,文件上传是一项常见的功能需求。传统的文件上传功能只支持单个文件的上传,但在某些场景下,我们可能需要实现文件夹上传的功能,以一次性上传整个文件夹内的所有文件。本文将介绍如何使用 Axios 这个流行的 JavaScript 库来实现文件夹上传功能。

准备工作

在开始实现文件夹上传之前,我们需要在前端页面中引入 Axios 库,并创建一个文件夹上传按钮和一个用于显示上传进度的进度条。以下是一个简单的 HTML 页面示例:

<!DOCTYPE html>
<html>
<head>
  <title>文件夹上传</title>
</head>
<body>
  <h1>文件夹上传</h1>
  <input type="file" id="folderInput" webkitdirectory mozdirectory directory multiple>
  <button id="uploadButton">上传</button>
  <progress id="progressBar" max="100" value="0"></progress>
  <p id="status"></p>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</body>
</html>

在上面的代码中,我们创建了一个文件夹上传按钮,并监听其 change 事件。当用户选择文件夹后,我们会将选中的文件夹包装成 FormData 对象,并调用上传函数。

文件夹上传实现

在 JavaScript 中,我们可以使用 Axios 来发送 POST 请求,并将文件夹的内容作为请求体发送到服务器端。以下是实现文件夹上传功能的 JavaScript 代码:

<script>
  // 获取文件夹上传按钮和进度条
  const folderInput = document.getElementById('folderInput');
  const uploadButton = document.getElementById('uploadButton');
  const progressBar = document.getElementById('progressBar');
  const status = document.getElementById('status');

  // 监听文件夹上传按钮的change事件
  folderInput.addEventListener('change', (event) => {
    const files = event.target.files;
    // 创建FormData对象
    const formData = new FormData();
    for (let i = 0; i < files.length; i++) {
      formData.append('folder[]', files[i]);
    }
    // 调用上传函数
    upload(formData);
  });

  // 上传函数
  function upload(formData) {
    axios.post('/upload', formData, {
      onUploadProgress: (progressEvent) => {
        // 更新进度条
        const percent = (progressEvent.loaded / progressEvent.total) * 100;
        progressBar.value = percent;
        status.textContent = `上传中...${percent.toFixed(2)}%`;
      }
    })
    .then(() => {
      // 上传完成
      progressBar.value = 100;
      status.textContent = '上传完成!';
    })
    .catch(() => {
      // 上传失败
      progressBar.value = 0;
      status.textContent = '上传失败!';
    });
  }
</script>

在上面的代码中,我们使用了 Axios 的 post 方法来发送 POST 请求,并将 formData 作为请求体发送到服务器端的 /uploadonUploadProgress 回调函数用于监听上传进度,并更新进度条的值和状态的文本内容。在上传完成后,我们会更新进度条的值为100,并显示上传完成的状态信息;如果上传失败,则会显示上传失败的状态信息。

总结

使用 Axios 实现文件夹上传是一种简单且高效的方式。通过将文件夹内容包装成 FormData 对象,并使用 Axios 的 POST 请求,我们可以将整个文件夹的内容一次性上传到服务器端,并在前端页面中显示上传进度和状态信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺芯技术猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值