标准化接口-文件上传下载

要用 CSV/JSON 批量导入数据、导出表数据、或分块上传大文件时读这篇

06-二次开发 / API参考 / 标准化接口
download_templateupload批量导入download批量导出导出CSVupload_files分块上传chunk大文件BLOCKED_EXTENSIONS文件后缀黑名单get_upload_base_path

文件上传下载接口

URL 中的 $view 为路由前缀(如 /pipeline_modelview/api),见 01-通用约定与路径对照.md

11. 下载模板 download_template

导入数据前先下载 CSV 模板,获取字段名和示例值。

GET  http://x.x.x.x/$view/api/download_template/

请求参数: 无。

响应: CSV 文件流。

  • 首行为 add_columns 字段名
  • 第二行为示例值

路由定义见 myapp/views/baseApi.py:1640/download_template/)。

12. 批量上传 / 导入 upload

通过 CSV 或 JSON 文件批量导入数据到对应表。

POST  http://x.x.x.x/$view/api/upload/
Content-Type: multipart/form-data

请求参数(Form Data):

参数 类型 必填 说明
csv_file file 上传文件,支持 .csv 和 .json 格式

CSV 文件要求: 首行 header 必须与数据库字段名一一对应。

响应示例:

{
  "status": 0,
  "message": "success 3 rows",
  "result": ["success", "success", "字段xxx不能为空"]
}

说明:

  • result 数组中每个元素对应上传文件中的一行处理结果,成功为 "success",失败为具体错误信息
  • 路由定义见 myapp/views/baseApi.py:1684/upload/

13. 批量下载 / 导出 download

将表数据导出为 CSV 文件。

GET  http://x.x.x.x/$view/api/download/

请求参数(通过 form_data query 传递):

参数 类型 必填 说明
id string 指定导出的记录 id,逗号分隔,如 id=1,2,3
filters array 同 list 接口的 filter 格式,导出筛选后的数据

说明:

  • 不传参数则导出全表数据(上限 20000 条,myapp/views/baseApi.py:1864page_size='20000'
  • 返回 CSV 文件流
  • 路由定义见 myapp/views/baseApi.py:1827/download/

14. 通用分块文件上传 upload_files

分块上传文件到服务器,支持大文件。

POST  http://x.x.x.x/$view/api/upload_files/
Content-Type: multipart/form-data

请求参数(Form Data):

参数 类型 必填 说明
file file 文件分块内容
filename string 完整文件名
upload_id string 前端生成的上传会话 ID(不传则回退使用 filename)
current_chunk int 当前分块序号(从 0 开始,默认 0)
current_offset int 当前分块在文件中的字节偏移量(默认 0)
total_chunk int 总分块数(默认 1)
total_size int 文件总大小(字节),最后一块上传完成后用于校验

中间分块响应:

{"status": 0, "message": "chunk received"}

最后一块响应:

{"status": 0, "path": "文件存储路径"}

说明:

  • 文件名通过 secure_filename 做安全化处理;缺少 filename 返回 HTTP 400
  • 后缀黑名单 BLOCKED_EXTENSIONSmyapp/views/baseApi.py:1760):.exe .bin .so .dll .dylib .sh .bat .cmd .com .elf .msi .app .deb .rpm .dmg .iso .o .a .lib .class .pyc .pyo;命中返回 HTTP 400
  • 最后一块若 total_size 与实际文件大小不一致,返回 HTTP 500 file size mismatch
  • 存储目录与返回路径由 get_upload_base_path(filename, upload_id) 决定,子类可覆盖。基类默认(myapp/views/baseApi.py:1769):
    • 物理存储目录:/data/k8s/kubeflow/pipeline/workspace/{username}/upload/{表名}/{YYYYMMDD}/{HH}/{MM}/
    • 返回给前端的路径:/mnt/{username}/upload/{表名}/{YYYYMMDD}/{HH}/{MM}/{filename}

⚠️ 已按代码改正:原 API 文档中的「Pipeline 工作空间文件上传 upload_to_workspace」(/ai_pipeline/upload_to_workspace//data_pipeline/upload_to_workspace/)在当前代码中已不存在grep -rn "upload_to_workspace" myapp 无命中)。工作空间上传现已统一为上面的 upload_files/,由各视图覆写 get_upload_base_path 定制目录。

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki