当前位置:首页 > JavaScript

js实现上传图片

2026-04-03 22:20:21JavaScript

使用HTML5的File API实现图片上传

创建一个文件输入元素,监听change事件获取用户选择的图片文件

<input type="file" id="imageUpload" accept="image/*">

通过FileReader读取图片文件内容

js实现上传图片

document.getElementById('imageUpload').addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (!file.type.match('image.*')) {
        alert('请选择图片文件');
        return;
    }

    const reader = new FileReader();
    reader.onload = function(e) {
        const imgPreview = document.createElement('img');
        imgPreview.src = e.target.result;
        document.body.appendChild(imgPreview);
    };
    reader.readAsDataURL(file);
});

使用FormData进行AJAX上传

创建FormData对象并附加图片文件

const formData = new FormData();
formData.append('image', file);

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

使用XMLHttpRequest实现上传进度监控

通过xhr.upload对象获取上传进度

js实现上传图片

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);
        console.log(`上传进度: ${percent}%`);
    }
};

xhr.onload = function() {
    if (xhr.status === 200) {
        console.log('上传完成');
    }
};

xhr.send(formData);

图片压缩处理

使用canvas对图片进行压缩

function compressImage(file, maxWidth, maxHeight, quality) {
    return new Promise((resolve) => {
        const img = new Image();
        img.src = URL.createObjectURL(file);

        img.onload = () => {
            const canvas = document.createElement('canvas');
            let width = img.width;
            let height = img.height;

            if (width > maxWidth) {
                height *= maxWidth / width;
                width = maxWidth;
            }

            if (height > maxHeight) {
                width *= maxHeight / height;
                height = maxHeight;
            }

            canvas.width = width;
            canvas.height = height;

            const ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0, width, height);

            canvas.toBlob(resolve, 'image/jpeg', quality);
        };
    });
}

多文件上传处理

处理多个文件选择的情况

document.getElementById('multiUpload').addEventListener('change', function(e) {
    const files = Array.from(e.target.files);
    const uploadPromises = files.map(file => {
        return compressImage(file, 800, 800, 0.7)
            .then(blob => {
                const formData = new FormData();
                formData.append('images[]', blob, file.name);
                return fetch('/upload', {
                    method: 'POST',
                    body: formData
                });
            });
    });

    Promise.all(uploadPromises)
        .then(responses => console.log('所有文件上传完成'))
        .catch(error => console.error('上传出错', error));
});

标签: 上传图片js
分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…