当前位置:首页 > JavaScript

js实现多张

2026-04-06 00:55:38JavaScript

js实现多张图片上传

使用HTML5的File API和FormData对象可以实现多张图片上传功能。以下是一个完整的实现示例:

<input type="file" id="fileInput" multiple accept="image/*">
<button id="uploadBtn">上传图片</button>
<div id="preview"></div>
document.getElementById('uploadBtn').addEventListener('click', function() {
    const fileInput = document.getElementById('fileInput');
    const files = fileInput.files;

    if(files.length === 0) {
        alert('请选择至少一张图片');
        return;
    }

    const formData = new FormData();
    for(let i = 0; i < files.length; i++) {
        formData.append('images[]', files[i]);
    }

    fetch('/upload', {
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        console.log('上传成功', data);
    })
    .catch(error => {
        console.error('上传失败', error);
    });
});

// 图片预览功能
document.getElementById('fileInput').addEventListener('change', function(e) {
    const preview = document.getElementById('preview');
    preview.innerHTML = '';

    Array.from(e.target.files).forEach(file => {
        const reader = new FileReader();
        reader.onload = function(event) {
            const img = document.createElement('img');
            img.src = event.target.result;
            img.style.height = '100px';
            preview.appendChild(img);
        };
        reader.readAsDataURL(file);
    });
});

服务器端处理(Node.js示例)

const express = require('express');
const multer = require('multer');
const app = express();

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

app.post('/upload', upload.array('images'), (req, res) => {
    console.log(req.files); // 处理上传的文件
    res.json({ success: true, files: req.files });
});

app.listen(3000);

进度显示实现

使用XMLHttpRequest可以显示上传进度:

function uploadWithProgress(files) {
    const xhr = new XMLHttpRequest();
    xhr.upload.onprogress = function(e) {
        if(e.lengthComputable) {
            const percent = (e.loaded / e.total) * 100;
            console.log(percent + '%');
        }
    };

    xhr.open('POST', '/upload', true);

    const formData = new FormData();
    for(let i = 0; i < files.length; i++) {
        formData.append('images[]', files[i]);
    }

    xhr.send(formData);
}

图片压缩处理

在上传前可以使用canvas压缩图片:

js实现多张

function compressImage(file, quality = 0.7) {
    return new Promise((resolve) => {
        const reader = new FileReader();
        reader.onload = function(event) {
            const img = new Image();
            img.onload = function() {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = img.width;
                canvas.height = img.height;
                ctx.drawImage(img, 0, 0);
                canvas.toBlob(resolve, 'image/jpeg', quality);
            };
            img.src = event.target.result;
        };
        reader.readAsDataURL(file);
    });
}

标签: 多张js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…