当前位置:首页 > JavaScript

js实现上传图片

2026-04-03 22:20:21JavaScript

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

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

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

通过FileReader读取图片文件内容

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对象获取上传进度

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

多文件上传处理

处理多个文件选择的情况

js实现上传图片

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实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

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