元素配合JavaScript的FormData对象可以实现多文件自动上传功能。以下是具体实现方法: HTM…">
当前位置:首页 > JavaScript

js实现多文件自动上传

2026-01-31 11:21:01JavaScript

实现多文件自动上传的步骤

使用HTML5的<input type="file">元素配合JavaScript的FormData对象可以实现多文件自动上传功能。以下是具体实现方法:

HTML部分

创建文件输入元素,设置multiple属性允许选择多个文件:

js实现多文件自动上传

<input type="file" id="fileInput" multiple>
<button id="uploadButton">上传文件</button>
<div id="progressContainer"></div>

JavaScript部分

监听文件选择并处理上传逻辑:

document.getElementById('uploadButton').addEventListener('click', function() {
    const files = document.getElementById('fileInput').files;
    if (files.length === 0) {
        alert('请先选择文件');
        return;
    }

    uploadFiles(files);
});

function uploadFiles(files) {
    const progressContainer = document.getElementById('progressContainer');
    progressContainer.innerHTML = '';

    Array.from(files).forEach(file => {
        const formData = new FormData();
        formData.append('file', file);

        const progressDiv = document.createElement('div');
        progressDiv.textContent = `上传 ${file.name}: 0%`;
        progressContainer.appendChild(progressDiv);

        const xhr = new XMLHttpRequest();
        xhr.open('POST', '/upload', true);

        xhr.upload.onprogress = function(e) {
            if (e.lengthComputable) {
                const percent = Math.round((e.loaded / e.total) * 100);
                progressDiv.textContent = `上传 ${file.name}: ${percent}%`;
            }
        };

        xhr.onload = function() {
            if (xhr.status === 200) {
                progressDiv.textContent = `上传 ${file.name}: 完成`;
            } else {
                progressDiv.textContent = `上传 ${file.name}: 失败`;
            }
        };

        xhr.send(formData);
    });
}

服务器端处理

Node.js Express示例处理上传请求:

js实现多文件自动上传

const express = require('express');
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

const app = express();

app.post('/upload', upload.single('file'), (req, res) => {
    res.status(200).send('文件上传成功');
});

app.listen(3000, () => console.log('服务器运行在3000端口'));

高级功能扩展

添加拖放上传支持:

const dropArea = document.getElementById('dropArea');

dropArea.addEventListener('dragover', (e) => {
    e.preventDefault();
    dropArea.classList.add('dragover');
});

dropArea.addEventListener('dragleave', () => {
    dropArea.classList.remove('dragover');
});

dropArea.addEventListener('drop', (e) => {
    e.preventDefault();
    dropArea.classList.remove('dragover');
    const files = e.dataTransfer.files;
    uploadFiles(files);
});

添加并发控制和错误处理:

function uploadFiles(files, maxConcurrent = 3) {
    let activeUploads = 0;
    let queue = [...files];

    function processQueue() {
        if (queue.length === 0 || activeUploads >= maxConcurrent) return;

        activeUploads++;
        const file = queue.shift();
        // 上传逻辑...

        xhr.onload = xhr.onerror = function() {
            activeUploads--;
            processQueue();
        };
    }

    // 初始化并发上传
    for (let i = 0; i < Math.min(maxConcurrent, files.length); i++) {
        processQueue();
    }
}

以上代码实现了多文件选择、进度显示、拖放上传和并发控制等功能。根据实际需求可以进一步扩展错误处理、文件类型验证等功能。

标签: 上传文件
分享给朋友:

相关文章

vue实现录音文件播放

vue实现录音文件播放

实现录音文件播放的方法 在Vue中实现录音文件播放需要结合HTML5的Web Audio API或第三方库。以下是两种常见的方法: 使用HTML5 Audio元素 通过Vue动态绑定<aud…

php 实现文件下载

php 实现文件下载

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

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

vue实现文件功能

vue实现文件功能

Vue 实现文件上传功能 使用 Vue 实现文件上传功能可以通过原生 HTML 的 <input type="file"> 结合 Vue 的事件处理和 HTTP 请求库(如 Axios)来…

vue实现语音上传

vue实现语音上传

实现语音上传功能 在Vue中实现语音上传功能需要结合浏览器的Web Audio API和文件上传逻辑。以下是一个完整的实现方案: 录音功能实现 安装依赖库recorder-core和wav编码器:…

vue实现文件进度

vue实现文件进度

Vue 实现文件上传进度 使用 Vue 实现文件上传进度可以通过结合 axios 或原生 XMLHttpRequest 的进度事件来实现。以下是两种常见方法: 使用 axios 上传文件并显示进度…