当前位置:首页 > 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。这些库提供了拖放上传、进度显示、文件预览等功能。

js库文件上传js实现

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

分块上传实现

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

js库文件上传js实现

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

文件验证处理

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

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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…