本文演示如何通过 REST API 使用同步上传接口上传文件到 DocFlow。
同步上传接口会等待文件处理完成后再返回结果,适合需要立即获取处理结果的场景。
DocFlow 提供同步上传接口 /api/app-api/sip/platform/v2/file/upload/sync,该接口与普通上传接口 /api/app-api/sip/platform/v2/file/upload 的区别在于:
- 普通上传接口:上传文件后立即返回,需要后续通过
/file/fetch 接口查询处理结果
- 同步上传接口:上传文件后等待处理完成,直接返回完整的处理结果,无需额外查询
同步上传接口会等待文件处理完成,处理时间取决于文件大小和复杂度。
对于大文件或复杂文档,可能需要较长的等待时间。建议设置合适的超时时间。
01 同步上传单个文件
通过 multipart/form-data 格式上传文件:
curl -X POST \
-H "x-ti-app-id: <your-app-id>" \
-H "x-ti-secret-code: <your-secret-code>" \
-F "file=@/path/to/your/file.pdf" \
"https://docflow.textin.com/api/app-api/sip/platform/v2/file/upload/sync?workspace_id=<your-workspace-id>"
02 同步上传多个文件
一次请求可以上传多个文件,系统会等待所有文件处理完成后再返回:
curl -X POST \
-H "x-ti-app-id: <your-app-id>" \
-H "x-ti-secret-code: <your-secret-code>" \
-F "file=@/path/to/1.pdf" \
-F "file=@/path/to/2.pdf" \
"https://docflow.textin.com/api/app-api/sip/platform/v2/file/upload/sync?workspace_id=<your-workspace-id>&batch_number=202412190001"
03 通过URL同步上传
同步上传接口也支持通过文件URL上传:
curl -X POST \
-H "x-ti-app-id: <your-app-id>" \
-H "x-ti-secret-code: <your-secret-code>" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://example.com/document.pdf"]
}' \
"https://docflow.textin.com/api/app-api/sip/platform/v2/file/upload/sync?workspace_id=<your-workspace-id>"
04 参数说明
同步上传接口的参数与普通上传接口完全相同:
必填参数
选填参数
可在 URL 查询参数中按需添加:
category: 文件类别(例如:invoice)
batch_number: 批次编号,未提供时系统自动生成
auto_verify_vat: 是否开启发票验真,默认 false
split_flag: 是否进行文件拆分,默认 false(详见文件拆分章节)
crop_flag: 是否进行多图切分,默认 false(详见多图切分章节)
target_process: 目标处理类型,可选 classify 或 extract。
Docflow 会默认会进行 解析->分类->抽取 完整流程。当target_process为classify时,流程执行至分类即结束
请求体参数
支持两种方式:
- 文件上传:使用
multipart/form-data 格式,字段名为 file(可重复多个)
- URL上传:使用
application/json 格式,包含 urls 数组(最多10个URL)
05 响应格式
同步上传接口返回的响应格式与 /file/fetch 接口相同,包含完整的处理结果:
{
"code": 200,
"msg": "成功",
"result": {
"total": 1,
"page": 1,
"page_size": 20,
"files": [
{
"id": "1955840505753140508",
"task_id": "1955840505753140509",
"task_type": 1,
"batch_number": "202412190001",
"name": "invoice.pdf",
"format": "pdf",
"recognition_status": 1,
"verification_status": 0,
"category": "invoice",
"pages": [
{
"page": 0,
"angle": 0,
"width": 1024,
"height": 1448,
"dpi": 144
}
],
"data": {
"fields": [
{
"key": "发票代码",
"identifier": "发票代码标识",
"value": "3100231130",
"position": [
{
"page": 0,
"vertices": [100, 200, 300, 200, 300, 250, 100, 250]
}
]
},
{
"key": "发票号码",
"identifier": "发票号码标识",
"value": "28737000",
"position": [
{
"page": 0,
"vertices": [350, 200, 500, 200, 500, 250, 350, 250]
}
]
}
],
"items": [],
"tables": [],
"stamps": [],
"handwritings": []
},
"duration_ms": 5000
}
]
}
}
响应中的关键字段:
result.files[]: 文件列表,每个文件包含完整的处理结果
result.files[].data.fields[]: 抽取的字段列表
result.files[].data.items[]: 表格数据列表
result.files[].data.tables[]: 全部表格数据列表
result.files[].data.stamps[]: 印章信息
result.files[].data.handwritings[]: 手写体信息
result.files[].recognition_status: 识别状态(1表示成功)
result.files[].duration_ms: 处理耗时(毫秒)
06 使用场景
适合使用同步上传的场景
- 需要立即获取处理结果的场景
- 单文件或少量文件处理
- 文件处理时间较短(通常几秒到几十秒)
- 简化代码逻辑,避免轮询查询
不适合使用同步上传的场景
- 批量处理大量文件
- 文件处理时间较长(超过1分钟)
- 需要异步处理的场景
- 网络不稳定或需要断点续传的场景
对于不适合同步上传的场景,建议使用普通上传接口 /file/upload 配合 /file/fetch 查询接口,实现异步处理流程。
07 注意事项
- 超时设置:同步上传接口需要等待处理完成,建议设置较长的超时时间(至少300秒)
- 处理时间:处理时间取决于文件大小、页数和复杂度,大文件可能需要较长时间
- 错误处理:如果处理失败,响应中会包含错误信息,
recognition_status 为 2 表示失败
- 批量处理:一次上传多个文件时,会等待所有文件处理完成,总耗时可能较长
- 网络稳定性:由于需要长时间保持连接,确保网络连接稳定