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

js实现多文件自动上传

2026-01-31 11:21:01JavaScript

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

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

HTML部分

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

<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示例处理上传请求:

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();
    }
}

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

js实现多文件自动上传

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

相关文章

如何运行java文件

如何运行java文件

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

vue文件下载实现

vue文件下载实现

使用 Blob 对象下载文件 在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。 axios.get('/api/…

vue实现文件导入

vue实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合File API完成。创建一个文件选择组件,监听change事件获取用户选择的文件…

vue实现上传封面

vue实现上传封面

Vue 实现上传封面功能 使用原生 input 文件上传 在 Vue 中可以通过原生 HTML 的 input 元素实现文件上传功能。创建一个文件输入框,监听 change 事件获取用户选择的文件。…

vue实现批量上传

vue实现批量上传

Vue 实现批量上传的方法 使用 <input type="file"> 和 multiple 属性 在 Vue 模板中添加一个文件输入框,设置 multiple 属性以允许选择多个文件。…

vue实现搜索文件

vue实现搜索文件

Vue 实现搜索文件功能 在 Vue 中实现文件搜索功能,可以通过以下步骤完成。这里假设文件数据存储在本地或通过 API 获取。 数据准备 确保有一个文件列表数据,可以是静态数据或从后端 API 获…