当前位置:首页 > JavaScript

js库文件上传js实现

2026-04-07 05:58:41JavaScript

文件上传的基本实现

使用原生JavaScript实现文件上传功能,可以通过监听文件输入框的change事件,获取用户选择的文件对象。利用FormData对象构建表单数据,通过XMLHttpRequest或fetch API发送到服务器。

const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (e) => {
    const file = e.target.files[0];
    const formData = new FormData();
    formData.append('file', file);

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

使用第三方库实现上传

对于更复杂的需求,可以使用专门的文件上传库如Dropzone.js或Uppy。这些库提供了拖放上传、进度显示、文件预览等功能。

Dropzone.js的基本用法:

// HTML中需要包含一个id为myDropzone的元素
Dropzone.options.myDropzone = {
    url: "/upload",
    paramName: "file",
    maxFilesize: 2, // MB
    acceptedFiles: "image/*",
    addRemoveLinks: true,
    success: function(file, response) {
        console.log("File uploaded successfully");
    }
};

分块上传实现

对于大文件上传,可以采用分块上传技术。将文件分割为多个小块,分别上传并在服务器端合并。

const CHUNK_SIZE = 5 * 1024 * 1024; // 5MB

async function uploadFile(file) {
    const fileSize = file.size;
    let start = 0;
    let chunkIndex = 0;

    while (start < fileSize) {
        const chunk = file.slice(start, start + CHUNK_SIZE);
        const formData = new FormData();
        formData.append('chunk', chunk);
        formData.append('chunkIndex', chunkIndex);
        formData.append('totalChunks', Math.ceil(fileSize / CHUNK_SIZE));
        formData.append('fileName', file.name);

        await fetch('/upload-chunk', {
            method: 'POST',
            body: formData
        });

        start += CHUNK_SIZE;
        chunkIndex++;
    }
}

进度显示实现

通过XMLHttpRequest的progress事件可以实时获取上传进度,更新UI显示。

const xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', (e) => {
    if (e.lengthComputable) {
        const percentComplete = (e.loaded / e.total) * 100;
        console.log(`上传进度: ${percentComplete}%`);
        document.getElementById('progressBar').value = percentComplete;
    }
});

xhr.open('POST', '/upload');
const formData = new FormData();
formData.append('file', file);
xhr.send(formData);

文件验证处理

在上传前可以对文件进行验证,包括大小、类型等限制。

js库文件上传js实现

function validateFile(file) {
    const validTypes = ['image/jpeg', 'image/png'];
    const maxSize = 10 * 1024 * 1024; // 10MB

    if (!validTypes.includes(file.type)) {
        alert('仅支持JPEG和PNG格式的图片');
        return false;
    }

    if (file.size > maxSize) {
        alert('文件大小不能超过10MB');
        return false;
    }

    return true;
}

fileInput.addEventListener('change', (e) => {
    const file = e.target.files[0];
    if (validateFile(file)) {
        // 执行上传
    }
});

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

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

vue 实现 文件上传

vue 实现 文件上传

使用 Vue 实现文件上传 基础文件上传实现 在 Vue 中实现文件上传可以通过原生 HTML 的 <input type="file"> 元素结合 Vue 的事件处理来完成。以下是一个基…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现删除

js实现删除

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