参考阿里云对象存储设计自己的大文件上传接口

115 阅读2分钟

概述

由于传统文件上传方式,仅通过一个接口完成,当上传大文件会出现2个问题:1.当上传失败时,需要重新上传整个文件;2.占用连接时间长。所以我们参考阿里云对象存储分片上传设计一组接口来解决大文件上传,并且增加秒传功能。

适用场景

  • 大文件上传
    上传文件较大,建议使用分块(分片)上传。
  • 网络环境较差
    网络环境较差时,建议使用分块(分片)上传。当出现上传失败的时候,您仅需重传失败的块。
  • 秒传功能
    文件已经上传过,无需再次上传。

上传流程

1714457271063.png

状态与接口关系

1714457328709.png

接口详情

  • 创建分块任务
//输入
{
  "fileName": "test.txt", // 文件名 
  "md5":"0cc175b9c0f1b6a831c399e269772661", // 文件内容生成md5
  "chunkSize": 1048676, // 分块的大小,示例 1 MB 
  "size": 32764281 // 文件的大小,示例大约 31.2 MB 
}
//输出
{
  "msg": "操作成功", 
  "code":"1", 
  "data": {
    "uploadId": "xxxxx", // 上传的Id
    "state": "0", // 状态,0(正在上传)/1(完成上传)
    "fileName": "test.txt" // 文件名
    "md5":"0cc175b9c0f1b6a831c399e269772661", // 文件内容生成md5
    "chunkSize": 1048676, // 分块的大小,示例 1 MB 
    "size": 32764281 // 文件的大小,示例大约 31.2 MB 
    // "path": "/opt/.../test.txt" 文件的绝对路径,正在上传,此字段无值
  }
}
  • 查询分块信息
//输入
{
  "uploadId": "xxxxx" // 上传的Id 
}
//输出
{
  "msg": "操作成功", 
  "code":"1", 
  "data": [{
    "uploadId": "xxxxx", // 上传的Id
    "index": 0, // 分块编号
    "size": 1048676, // 分块的大小,示例 1 MB
    "state": "0" // 状态,0(等待上传)/1(已经上传) 
  }]
}
  • 上传分块文件
//输入
{
  "uploadId": "xxxxx" // 上传的Id 
  "index": 0, // 分块编号
  "file": // 分块的文件
}
//输出
{
  "msg": "操作成功", 
  "code":"1"
}
  • 合并分块文件
//输入
{
  "uploadId": "xxxxx" // 上传的Id 
}
//输出
{
  "msg": "操作成功", 
  "code":"1",
  "data": {
    "path" : "/opt/.../test.txt" // 文件的绝对路径,文件名已存在,将会重命名文件
  }
}
  • 取消分块任务
//输入
{
  "uploadId": "xxxxx" // 上传的Id 
}
//输出
{
  "msg": "操作成功", 
  "code":"1"
}

# 阿里云 对象存储 分片上传
# 七牛 对象存储 分片上传
# 青云 分段上传
# 金山云 对象存储 分片上传