如何使用JavaScript实现多文件上传功能?

我正在研究JavaScript的多文件上传功能,但是我不知道该怎样实现。我想要能够同时上传多个文件,并且能够监听进度和上传结果。我希望能够通过点击按钮或者拖拽文件的方式来上传文件,并且也希望能够限制上传文件的类型和大小。请问有哪位专家能够给我提供一些思路或者代码实现的示例呢?非常感谢!

提问时间:2023-08-04 18:28:50 编辑时间:2023-08-04 18:28:52 提问者: Enchanted_Garden
  • Black_Raven
    1

    实现多文件上传的功能,可以使用HTML5新增的File API和FormData API,这些API支持在不刷新页面的情况下上传多个文件,监听上传进度和上传结果。具体实现步骤如下:

    1. 创建一个input元素,设置type为file,多选属性为true,用于选择文件。

    2. 在获得文件列表后,循环遍历文件列表,创建FormData对象,并将每个文件添加到FormData中。

    3. 使用XMLHttpRequest对象把FormData提交给服务器进行处理,并监听上传进度和上传结果。

    4. 在提交FormData时,可以通过XMLHttpRequest对象的setRequestHeader方法设置请求头,以控制上传文件的类型和大小。

    下面是一个简单的示例代码:

    HTML代码:

    <input id="fileInput" type="file" multiple>
    <button id="uploadBtn">上传</button>
    

    JavaScript代码:

    const fileInput = document.getElementById('fileInput');
    const uploadBtn = document.getElementById('uploadBtn');
    uploadBtn.addEventListener('click', uploadFiles);
    
    function uploadFiles() {
      const files = fileInput.files;
      const formData = new FormData();
      for(let i = 0; i < files.length; i++) {
        formData.append('files', files[i]);
      }
      const xhr = new XMLHttpRequest();
      xhr.open('POST', '/upload');
      xhr.setRequestHeader('Content-Type', 'multipart/form-data'); // 设置请求头
      xhr.upload.onprogress = function(e) {
        console.log('上传进度:' + (e.loaded / e.total * 100) + '%');
      }
      xhr.onload = function() {
        console.log('上传成功');
      }
      xhr.send(formData);
    }
    

    以上代码只是一个简单示例,要实现更完善的多文件上传功能,还需根据业务需求进行相应的优化。

    回答时间:2023-08-04 18:28:55