当前位置: 首页 > news >正文

题库批量(文件)导入接口文档(补充)

接上一回 补充接回,
------->《题库批量(文件)导入的全链路优化实践》
------->《题库批量(文件)导入的具体代码实现》

补充一下接口文档,这样子可以跟好得理清楚逻辑

接口概述
用于支持大文件(如 Excel 题库)的分片上传、异步解析及批量入库,包含分片初始化、分片上传、合并分片、任务状态查询 4 个核心接口。

1. 初始化分片上传

接口说明
前端选择文件后,先调用此接口获取分片上传凭证(uploadId)和分片总数,用于后续分片切割和上传。

  • 请求 URL/api/question/import/multipart/init
  • 请求方式POST
  • Content-Typeapplication/json

请求参数(Request Body)
将参数表格转换为Markdown语法如下:

参数表格

参数名类型是否必填说明
fileNameString文件名(含后缀),如 “高中数学题库.xlsx”
fileMd5String文件 MD5 值(前端计算,用于唯一标识文件,支持断点续传)
fileSizeLong文件总大小(单位:字节),用于计算分片总数(分片大小固定为 5MB)

表格内容严格遵循Markdown语法规则,层级清晰,无多余包装符号。

响应参数(Response Body)
统一响应格式为Result<InitMultipartResponse>,结构如下:
以下是转换后的后的 Markdown 表格格式组织的内容:

一级字段

字段名类型说明
codeInt响应码(0:成功,1:失败)
msgString响应消息
dataObject响应数据(见下表)

data 字段详情
以下是符合Markdown语法规范的表格形式:

参数表格

参数名类型说明
uploadIdString-suppression 分片上传唯一标识(OSS 返回,后续上传分片和合并需使用)
partCountInt分片总数(前端需按此数量切割文件,如 100MB 文件→20 片,每片 5 MB)

示例
请求示例:

{"fileName": "高中数学题库.xlsx","fileMd5": "a1b2c3d4e5f67890abcdef1234567890","fileSize": 104857600  // 100MB(100*1024*1024)
}

响应示例:

{"code": 0,"msg": "操作成功","data": {"uploadId": "7F26866A168A4B9A8F6A7D8F7A6B5C4D","partCount": 20}
}

2. 上传单个分片

接口说明
前端将文件按partCount切割为多个分片后,循环调用此接口上传每个分片(从 1 到partCount)。

  • 请求 URL/api/question/import/multipart/upload
  • 请求方式POST
  • Content-Typeapplication/octet-stream(二进制流)

请求参数(Request Param + Body)

参数位置参数名类型是否必填说明
QueryuploadIdString分片上传标识(从初始化接口获取)
QuerypartNumberInt分分片序号(从 1 开始,如 1、2、…、20)
QueryfileMd5String文件 MD5 值(与初始化时一致)
QueryfileNameString文件名(与初始化时一致)
BodypartDataByte[]parte binario 数据(每片大小≤5MB,最后一片可小于 5MB)

响应参数(Response Body)
统一响应格式为Result<Void>,结构如下:

字段名类型说明
codeInt响应码(0:成功,1:失败)
msgString响应消息(如“分片上传成功 environ)

示例

请求示例
Query 参数uploadId=7F26866A168A4B9A8F6A7D8F7A6B5C4D&partNumber=1&fileMd5=a1b2c3d4e5f67890abcdef1234567890&fileName=高中数学题库.xlsx
Body:第 1 片的二进制数据(5MB)

响应示例:

{"code": 0,"msg": "操作成功","data": null
}

3. 合并分片并创建导入任务

接口说明
所有分片上传完成后,调用此接口通知后端合并分片为完整文件,并创建异步导入任务(返回任务 ID 供查询进度)。

  • 请求 URL/api/question/import/multipart/complete
  • 请求方式POST
  • Content-Typeapplication/x-www-form-urlencoded

请求参数(Request Param)

玩法烹饪参数名类型是否必填说明
uploadIdString分片上传标识(与初始化时一致)
fileMd5String文件 MD5 值(与初始化时一致)
fileNameString文件名(与初始化时一致)

响应参数(Response Body)
统一响应格式为Result<String>,结构如下:

字段名类型说明
codeInt响应码(0:成功,1:失败)
msgString响应消息
dataString任务 ID(用于查询导入进度)

示例
请求示例:

Query 参数uploadId=7F26866A168A4B9A8F6A7D8F7A6B5C4D&fileMd5=a1b2c3d4e5f67890abcdef1234567890&fileName=高中数学题库.xlsx

响应示例:

{"code": 0,"msg": "操作成功","data": "9f8e7d6c5b4a3b2c1d0e9f8e7d6c5b4a"  // 任务ID
}

4. 查询任务状态

接口说明
前端通过任务 ID 轮询调用此接口,获取导入任务的实时状态(处理中 / 成功 / 失败)及结果。

  • 请求 URL/api/question/import/task/status/{taskId}
  • 请求方式GET
  • 请求参数(Path Param)
参数名类型是否必填说明
taskIdString任务 ID(从合并接口获取)

响应参数(Response Body)
统一响应格式为Result<TaskStatusDTO>,结构如下:

一级字段类型说明
codeInt响应码(0:成功,1:失败)
msgString响应消息
dataObject任务状态详情(见下表)

data字段详情:

参数名类型说明
taskIdString任务 ID(与请求一致)
statusString任务状态:processing(处理中)、success(成功)、failed(失败)、not_found(任务不存在)
totalInt成功导入的试题总数(仅 status=success 时返回)
errorMsgString错误信息(仅 status=failed 时返回,如解析失败原因)

示例
请求示例

URL/api/question/import/task/status/9f8e7d6c5b4a3b2c1d0e9f8e7d6c5b4a
响应示例(处理中):

{"code": 0,"msg": "操作成功","data": {"taskId": "9f8e7d6c5b4a3b2c1d0e9f8e7d6c5b4a","status": "processing"}
}

响应示例(成功):

{"code": 0,"msg": "操作成功","data": {"taskId": "9f8e7d6c5b4a3b2c1d0e9f8e7d6c5b4a","status": "success","total": 5000  // 成功导入5000条试题}
}

响应示例(失败):

{"code": 0,"msg": "操作成功","data": {"taskId": "9f8e7d6c5b4a3b2c1d0e9f8e7d6c5b4a","status": "failed","errorMsg": "Excel格式错误:第10行缺少答案字段"}
}

接口调用流程

  1. 前端计算文件 MD5、获取文件大小,调用「初始化分片上传」接口,得到uploadIdpartCount
  2. 按partCount切割文件为分片(每片 5MB),循环调用「上传单个分片」接口,确保所有分片上传成功;
  3. 调用「合并分片并创建导入任务」接口,得到taskId
  4. 轮询调用「查询任务状态」接口,直到statussuccess或failed,展示结果给用户。

异常处理说明

  1. 若分片上传失败(如网络中断),前端可重新调用「上传单个分片」接口,仅重传失败的分片(基于partNumber);
  2. 若任务状态为failed,可通过errorMsg提示用户修正文件后重新上传;
  3. 接口返回code=1时,msg字段会说明具体错误原因(如 “文件 MD5 不匹配”“分片序号超出范围”)。
http://www.dtcms.com/a/438634.html

相关文章:

  • Day93 基本情报技术者 单词表29 ビッグデータ基礎
  • 网站制作是不是要一个后台wordpress的目录结构
  • 域名对网站有什么影响吗在线网址免费的
  • 什么网站做h5没有广告国内免费saas crm正在
  • 【成功解决windows端tensorrt报错】Unable to load library: nvinfer_builder_resource.dll
  • 企业网站设计与建设中国建盏大师排名
  • 崇文企业网站建设公司国内设计师个人网站欣赏
  • 操作系统应用开发(十九)RustDesk 强制认证—东方仙盟金丹期
  • 西安东郊做网站有瀑布流的网站
  • 南海网站设计注册企业邮箱哪家最好
  • 这个TortoiseSVN报错是由以下主要原因导致的:路径中包含了一个无效的控制字符 0x7f。下面为您详细解释:1. 根本原因:无效的控制字符 0x7f•
  • 服务端渲染SSR
  • RabbitMQ C++ 客户端封装与实战
  • 做网站建设需要什么资质广东平台网站建设找哪家
  • Coze源码分析-资源库-编辑工作流-前端源码-核心组件
  • 胡恩全10.3作业
  • 长沙门户网站如何在微信上做小程序
  • Linux网络Socket编程TCP
  • 神卓云监控 K900 在海康 / 大华异地监控场景中的应用实践
  • 深圳专业网站开发上海公司建立网站吗
  • Photoshop - Photoshop 工具栏(1)移动工具
  • 怎么给网站做域名重定向公司网站建设合规吗
  • [创业之路-664]:越是通用的东西,适用的范围越广,解决问题的受众越多,解决方案的提供商越垄断,强者恒强。因此,通用 人工智能的服务是少数大厂的游戏。
  • id创建网站桐乡市城乡规划建设局网站
  • 网站建设谈单情景对话html响应式网页设计代码范文
  • 设计图片免费素材网站做网站运营需要什么资源
  • gas 优化
  • [创业之路-667]:第四次工业革命(智能革命)未来将创造大量的财富,普通人通过哪些方式参与这些财富的创造与分享?
  • New StarsAI1.0.1
  • 青岛高端网站制作培训机构网站建设要求