Skip to content

文件上传接口

文件上传相关的 API 接口,支持多种上传方式、文件类型和存储策略。

📤 基础上传接口

单文件上传

接口地址POST /api/upload

请求头

Authorization: Bearer <jwt-token>
Content-Type: multipart/form-data

请求参数

参数名类型必填说明
filefile上传的文件
storageTypestring存储类型(LOCAL/ALIYUN/TENCENT)
categorystring文件分类
descriptionstring文件描述

请求示例

bash
curl -X POST "http://localhost:8080/api/upload" \
  -H "Authorization: Bearer <token>" \
  -F "file=@/path/to/image.jpg" \
  -F "storageType=LOCAL" \
  -F "category=avatar" \
  -F "description=用户头像"

响应示例

json
{
  "code": 200,
  "message": "上传成功",
  "data": {
    "id": 1,
    "filename": "image_20240115103000.jpg",
    "originalName": "image.jpg",
    "fileSize": 102400,
    "fileType": "image/jpeg",
    "storageType": "LOCAL",
    "url": "http://localhost:8080/uploads/image_20240115103000.jpg",
    "thumbnailUrl": "http://localhost:8080/uploads/thumbnails/image_20240115103000.jpg",
    "uploadTime": "2024-01-15T10:30:00Z",
    "uploader": {
      "id": 1,
      "username": "admin"
    }
  }
}

多文件上传

接口地址POST /api/upload/multiple

请求参数

参数名类型必填说明
filesfile[]多个文件
storageTypestring存储类型
categorystring文件分类

响应示例

json
{
  "code": 200,
  "message": "上传成功",
  "data": [
    {
      "id": 1,
      "filename": "image1.jpg",
      "originalName": "image1.jpg",
      "url": "http://localhost:8080/uploads/image1.jpg",
      "status": "SUCCESS"
    },
    {
      "id": 2,
      "filename": "image2.jpg",
      "originalName": "image2.jpg",
      "url": "http://localhost:8080/uploads/image2.jpg",
      "status": "SUCCESS"
    }
  ]
}

🔄 分块上传接口

适用于大文件上传,支持断点续传。

初始化分块上传

接口地址POST /api/upload/chunk/init

请求参数

参数名类型必填说明
filenamestring文件名
fileSizeinteger文件大小(字节)
chunkSizeinteger分块大小(字节)
totalChunksinteger总分块数

响应示例

json
{
  "code": 200,
  "message": "初始化成功",
  "data": {
    "uploadId": "upload_123456",
    "chunkSize": 1048576,
    "totalChunks": 10
  }
}

上传分块

接口地址POST /api/upload/chunk/upload

请求参数

参数名类型必填说明
uploadIdstring上传会话 ID
chunkNumberinteger分块序号(从1开始)
filefile分块文件

响应示例

json
{
  "code": 200,
  "message": "分块上传成功",
  "data": {
    "chunkNumber": 1,
    "uploadedChunks": [1],
    "progress": "10%"
  }
}

完成分块上传

接口地址POST /api/upload/chunk/complete

请求参数

参数名类型必填说明
uploadIdstring上传会话 ID
filenamestring最终文件名

响应示例

json
{
  "code": 200,
  "message": "文件上传完成",
  "data": {
    "id": 1,
    "filename": "large_file.zip",
    "url": "http://localhost:8080/uploads/large_file.zip",
    "fileSize": 10485760
  }
}

🌐 URL 上传接口

支持从网络 URL 直接上传文件。

URL 上传

接口地址POST /api/upload/url

请求参数

参数名类型必填说明
urlstring文件 URL
filenamestring自定义文件名
storageTypestring存储类型

请求示例

json
{
  "url": "https://example.com/image.jpg",
  "filename": "downloaded_image.jpg",
  "storageType": "LOCAL"
}

📁 文件管理接口

获取文件信息

接口地址GET /api/upload/{id}

路径参数

参数名类型必填说明
idinteger文件 ID

响应示例

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "id": 1,
    "filename": "image.jpg",
    "originalName": "image.jpg",
    "fileSize": 102400,
    "fileType": "image/jpeg",
    "storageType": "LOCAL",
    "url": "http://localhost:8080/uploads/image.jpg",
    "thumbnailUrl": "http://localhost:8080/uploads/thumbnails/image.jpg",
    "uploadTime": "2024-01-15T10:30:00Z",
    "uploader": {
      "id": 1,
      "username": "admin"
    },
    "metadata": {
      "width": 1920,
      "height": 1080,
      "duration": null
    }
  }
}

删除文件

接口地址DELETE /api/upload/{id}

路径参数

参数名类型必填说明
idinteger文件 ID

批量删除文件

接口地址DELETE /api/upload/batch

请求参数

json
{
  "ids": [1, 2, 3]
}

🖼️ 图片处理接口

生成缩略图

接口地址GET /api/upload/{id}/thumbnail

查询参数

参数名类型必填说明
widthinteger宽度(默认200)
heightinteger高度(默认200)
qualityinteger质量(1-100,默认80)

响应:直接返回缩略图二进制流

图片信息获取

接口地址GET /api/upload/{id}/info

响应示例

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "width": 1920,
    "height": 1080,
    "format": "JPEG",
    "colorSpace": "sRGB",
    "hasAlpha": false,
    "orientation": 1,
    "fileSize": 102400,
    "exif": {
      "camera": "Canon EOS 5D Mark IV",
      "lens": "EF 24-70mm f/2.8L II USM",
      "iso": 100,
      "shutterSpeed": "1/125",
      "aperture": "f/2.8",
      "focalLength": "50mm"
    }
  }
}

📊 上传统计接口

获取上传统计

接口地址GET /api/upload/stats

响应示例

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "totalFiles": 1500,
    "totalSize": 1572864000,
    "todayUploads": 25,
    "todaySize": 26214400,
    "storageDistribution": {
      "LOCAL": 800,
      "ALIYUN": 500,
      "TENCENT": 200
    },
    "fileTypeDistribution": {
      "image/jpeg": 800,
      "image/png": 400,
      "application/pdf": 200,
      "other": 100
    }
  }
}

🔧 配置相关接口

获取上传配置

接口地址GET /api/upload/config

响应示例

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "maxFileSize": 104857600,
    "allowedTypes": ["image/jpeg", "image/png", "image/gif", "application/pdf"],
    "chunkSize": 1048576,
    "maxChunks": 100,
    "storageTypes": ["LOCAL", "ALIYUN", "TENCENT"],
    "thumbnailSizes": ["200x200", "400x400", "800x800"]
  }
}

⚠️ 错误码说明

错误码说明可能原因
2001文件大小超过限制文件大于配置的最大大小
2002文件类型不支持文件类型不在允许列表中
2003存储空间不足用户存储配额已满
2004上传失败网络或服务器错误
2005分块上传失败分块校验失败
2006文件已存在相同文件已上传
2007URL 下载失败网络连接问题

🧪 测试示例

基础文件上传

bash
# 单文件上传
curl -X POST "http://localhost:8080/api/upload" \
  -H "Authorization: Bearer <token>" \
  -F "file=@test.jpg" \
  -F "category=test"

# 多文件上传
curl -X POST "http://localhost:8080/api/upload/multiple" \
  -H "Authorization: Bearer <token>" \
  -F "files=@image1.jpg" \
  -F "files=@image2.jpg"

分块上传示例

bash
# 1. 初始化分块上传
curl -X POST "http://localhost:8080/api/upload/chunk/init" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "large_file.zip",
    "fileSize": 10485760,
    "chunkSize": 1048576,
    "totalChunks": 10
  }'

# 2. 上传分块(示例:上传第1块)
curl -X POST "http://localhost:8080/api/upload/chunk/upload" \
  -H "Authorization: Bearer <token>" \
  -F "uploadId=<upload-id>" \
  -F "chunkNumber=1" \
  -F "file=@chunk1.bin"

# 3. 完成上传
curl -X POST "http://localhost:8080/api/upload/chunk/complete" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "uploadId": "<upload-id>",
    "filename": "large_file.zip"
  }'

🔄 更新日志

v1.0.0 (2024-01-01)

  • 基础文件上传接口
  • 多文件上传支持
  • 分块上传(断点续传)
  • URL 上传功能
  • 文件管理接口
  • 图片处理功能
  • 上传统计信息

🔗 相关链接API 概览