返回

前端分片上传实现:阿里云SDK+React精解

前端

在互联网飞速发展的今天,前端开发面临着越来越多海量文件上传的需求,传统的文件上传方式对于大型文件的传输效率低下且容易出错。阿里云提供的分片上传技术可以有效解决此类问题,本文将详细介绍如何使用阿里云SDK结合React框架实现前端分片上传。

分片上传原理

分片上传将大文件切割成多个较小的分片,分批上传到OSS(对象存储服务),OSS会根据分片信息组装成完整的文件。与传统上传方式相比,分片上传具有以下优势:

  • 高可靠性: 即使在网络不稳定的情况下,也可以通过重传机制保证数据完整性。
  • 断点续传: 上传中断后,可以从断点处继续上传,避免重新上传。
  • 并发上传: 分片上传支持多线程并发上传,大大提升上传效率。

实战:阿里云SDK+React实现分片上传

1. 安装阿里云SDK

npm install @alicloud/oss --save

2. 引入React组件

import React, { useState, useEffect } from "react";

3. 创建分片上传组件

const FileUpload = () => {
  const [file, setFile] = useState(null);
  const [progress, setProgress] = useState(0);

  useEffect(() => {
    // 监听文件选择事件
    const input = document.querySelector("input[type=file]");
    input.addEventListener("change", handleFileSelect);
  }, []);

  const handleFileSelect = (e) => {
    const file = e.target.files[0];
    setFile(file);
  };

  const startUpload = async () => {
    const client = new OSS({ ...ossConfig }); // 使用阿里云SDK配置OSS客户端
    const filePath = `folder/${file.name}`; // 自定义文件路径,可根据实际业务修改

    // 分片上传,返回一个Promise
    const uploadTask = client.multipartUpload(filePath, file, {
      parallel: 5, // 并发上传分片数
      partSize: 10 * 1024 * 1024, // 每个分片大小,单位为字节
    });

    // 监听分片上传进度
    uploadTask.on("part-uploaded", (part) => {
      // 计算上传进度
      const currentProgress = (part.loaded * 100) / file.size;
      setProgress(currentProgress);
    });

    // 分片上传完成
    uploadTask.then((result) => {
      console.log("文件上传成功!", result);
    });
  };

  return (
    <div>
      <input type="file" />
      <button onClick={startUpload}>上传</button>
      <div>进度:{progress}%</div>
    </div>
  );
};

4. 配置OSS参数

const ossConfig = {
  region: "your-region",
  accessKeyId: "your-access-key-id",
  accessKeySecret: "your-access-key-secret",
  bucket: "your-bucket-name",
};

SEO优化