当前位置:首页 > JavaScript

js实现图片上传

2026-02-28 17:38:57JavaScript

使用HTML和JavaScript实现图片上传

创建一个简单的文件上传表单,监听文件选择事件,获取用户选择的图片文件

<input type="file" id="imageUpload" accept="image/*">
<div id="preview"></div>
const imageUpload = document.getElementById('imageUpload');
const preview = document.getElementById('preview');

imageUpload.addEventListener('change', function(event) {
    const file = event.target.files[0];
    if (file) {
        const reader = new FileReader();
        reader.onload = function(e) {
            const img = document.createElement('img');
            img.src = e.target.result;
            preview.innerHTML = '';
            preview.appendChild(img);
        };
        reader.readAsDataURL(file);
    }
});

验证图片类型和大小

在上传前验证图片格式和大小,确保符合要求

imageUpload.addEventListener('change', function(event) {
    const file = event.target.files[0];
    const validTypes = ['image/jpeg', 'image/png', 'image/gif'];
    const maxSize = 2 * 1024 * 1024; // 2MB

    if (!validTypes.includes(file.type)) {
        alert('请上传JPEG、PNG或GIF格式的图片');
        return;
    }

    if (file.size > maxSize) {
        alert('图片大小不能超过2MB');
        return;
    }

    // 继续处理有效图片
});

使用FormData上传图片到服务器

通过AJAX将图片发送到服务器端处理

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

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

// 在文件选择事件中调用
imageUpload.addEventListener('change', function(event) {
    const file = event.target.files[0];
    if (file) {
        uploadImage(file);
    }
});

显示上传进度

对于大文件上传,可以显示上传进度条

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

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

    xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
            const percentComplete = (e.loaded / e.total) * 100;
            console.log(percentComplete + '% 已上传');
            // 更新进度条UI
        }
    };

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

    xhr.send(formData);
}

多图片上传实现

允许用户一次选择多个图片并上传

js实现图片上传

<input type="file" id="multiImageUpload" accept="image/*" multiple>
<div id="multiPreview"></div>
const multiUpload = document.getElementById('multiImageUpload');
const multiPreview = document.getElementById('multiPreview');

multiUpload.addEventListener('change', function(event) {
    const files = event.target.files;
    if (files.length > 0) {
        Array.from(files).forEach(file => {
            const reader = new FileReader();
            reader.onload = function(e) {
                const img = document.createElement('img');
                img.src = e.target.result;
                img.style.maxWidth = '100px';
                img.style.margin = '5px';
                multiPreview.appendChild(img);
            };
            reader.readAsDataURL(file);
        });

        // 上传所有图片
        uploadMultipleImages(files);
    }
});

function uploadMultipleImages(files) {
    const formData = new FormData();
    Array.from(files).forEach((file, index) => {
        formData.append(`images[${index}]`, file);
    });

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

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

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…