Skip to main content
API目录

文档上传

本文为您介绍通义数据挖掘文档上传API的语法及示例。

1. 申请上传租约

请求语法

POST /zhiwen-file/apply_upload_lease HTTP/1.1

请求参数

名称

类型

必填

描述

示例值

fileName

string

文档名称

阿里云百炼.pdf

sizeBytes

number

上传文档的大小,单位字节

28123

md5

string

文档md5

返回参数

名称

类型

描述

code

int

状态码

data

object

相应数据

-param

object

用于上传文档的 HTTP 请求参数

-headers

object

第2步上传文档时,需要放到 Header 中的 K-V 字段,K 和 V 均为字符串

-x-bailian-extra

string

-Content-Type

string

-method

string

HTTP 调用方法

-url

string

第2步上传文档时请求的url

-type

string

文档的上传方式

-lease_id

string

租约唯一 ID,第3步提交文档解析接口时,需要使用该参数

requestId

string

请求ID

success

boolean

是否成功

message

string

响应消息

示例

正常返回示例 JSON格式
{
  "code": 200,
  "data": {
    "param": {
      "headers": {
        "x-bailian-extra": "PkdiMDOidwEwMTE4KnY2MQ==",
        "Content-Type": "text/plain"
      },
      "method": "PUT",
      "url": "https://dashscope-file-datacenter-prod-01.oss-cn-beijing.aliyuncs.com/1880205101189661/10064170/zhiwen/3631bf9f24ea4ac7b362a135deee7fec.1753176187488.txt?Expires=1753182187&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE"
    },
    "type": "OSS.PreSignedUrl",
    "lease_id": "3631bf9f24ea4ac7b3dr5135deee7fec.1752176287488"
  },
  "requestId": "e1cdcfab-897d-9b7b-8c38-72aa39a13c87",
  "success": true,
  "message": "成功"
}

2. 上传文档到OSS

使用上一步(申请文档上传租约)返回的data.param.urldata.param.methoddata.param.headersx-bailian-extraContent-Type等参数,将您在本地的文档上传至OSS。示例代码如下。
# 示例代码仅供参考,请勿在生产环境中直接使用
import requests

def upload_file(pre_signed_url, file_path):
    try:
        # 设置请求头
        headers = {
            "x-bailian-extra": "请替换为您在上一步中调用申请上传租约接口实际返回的data.param.headers中X-bailian-extra字段的值",
            "Content-Type": "请替换为您在上一步中调用申请上传租约接口实际返回的data.param.headers中Content-Type字段的值"
        }

        # 读取文档并上传
        with open(file_path, 'rb') as file:
            # 下方设置请求方法用于文档上传,需与您在上一步中调用申请上传租约接口实际返回的data.param中method字段的值一致
            response = requests.put(pre_signed_url, data=file, headers=headers)

        # 检查响应状态码
        if response.status_code == 200:
            print("File uploaded successfully.")
        else:
            print(f"Failed to upload the file. ResponseCode: {response.status_code}")

    except Exception as e:
        print(f"An error occurred: {str(e)}")

if __name__ == "__main__":

    pre_signed_url_or_http_url = "请替换为您在上一步中调用申请上传租约接口实际返回的data.param中url字段的值"

    # 文档来源是本地,上传本地文档至OSS
    file_path = "请替换为您需要上传文档的实际本地路径"
    upload_file(pre_signed_url_or_http_url, file_path)

3. 提交解析文档

请求语法

POST /zhiwen-file/submit_parse_file HTTP/1.1

请求参数

名称

类型

必填

描述

示例值

leaseId

string

租约唯一 ID,通过申请租约获取。

3631bf9f24ea4ac7b3dr5135deee7fec.1752176287488

返回参数

名称

类型

描述

code

int

状态码

data

object

-fileSize

string

文档大小

-docId

string

docId

-name

string

文档名称

-pageSize

number

页数

-type

string

文档类型

-url

string

文档地址

-fileId

string

文档ID,后续对话需使用此ID

requestId

string

请求ID

success

boolean

是否成功

message

string

响应消息

示例

正常返回示例 JSON格式
{
  "code": 200,
  "data": {
    "fileSize": "280931",
    "docId": "1397267735092973568",
    "name": "阿里云百炼",
    "pageSize": 5,
    "type": "pdf",
    "url": "https://dashscope-file-datacenter-prod-01.oss-cn-beijing.aliyuncs.com/1880205101189661/10064170/zhiwen/3631bf9f24ea4ac7b362a135deee7fec.1753176187488.pdf?Expires=1753435388&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
    "fileId": "file_zhiwen_XXX"
  },
  "requestId": "e33ba5e9-fef6-96ae-b8b0-1b4a0c151e2b",
  "success": true,
  "message": "成功"
}

调用示例

import hashlib
import os
import requests
from http import HTTPStatus

'''
API名称:文档上传
API路径:https://dashscope.aliyuncs.com/api/v2/apps/zhiwen-file/apply_upload_lease
        https://dashscope.aliyuncs.com/api/v2/apps/zhiwen-file/submit_parse_file
环境要求:Python >= 3.7
'''

apply_lease_url = "https://dashscope.aliyuncs.com/api/v2/apps/zhiwen-file/apply_upload_lease"
submit_file_url = "https://dashscope.aliyuncs.com/api/v2/apps/zhiwen-file/submit_parse_file"
request_headers = {
    "Authorization": os.environ.get("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    "Content-Type": "application/json"
}

file_path = "./test.txt"
file_name = os.path.basename(file_path)
file_size = os.path.getsize(file_path)
with open(file_path, 'rb') as f:
    md5 = hashlib.md5()
    while True:
        data = f.read(4096)  # 每次读取4KB数据
        if not data:
            break
        md5.update(data)
file_md5 = md5.hexdigest()

# 1. 申请租约
response = requests.post(apply_lease_url,
                         json={
                             "fileName": file_name,
                             "sizeBytes": file_size,
                             "md5": file_md5
                         },
                         headers=request_headers)
lease_data = {}
if response.status_code == HTTPStatus.OK:
    print("1. Lease applied successfully.")
    print(response.json())
    lease_data = response.json()['data']
else:
    print(f'response={response.json()}')
    print(f'code={response.status_code}')

# 2. 上传文档
upload_headers = {
    "X-bailian-extra": lease_data['param']['headers']['x-bailian-extra'],
    "Content-Type": lease_data['param']['headers']['Content-Type']
}
with open(file_path, 'rb') as file:
    # 下方设置请求方法用于文档上传,需与您在上一步中调用ApplyFileUploadLease接口实际返回的Data.Param中Method字段的值一致
    response = requests.put(lease_data['param']['url'], data=file, headers=upload_headers)
if response.status_code == HTTPStatus.OK:
    print("2. File uploaded successfully.")
else:
    print(f"Failed to upload the file. ResponseCode: {response.status_code}")

# 3.提交解析
response = requests.post(submit_file_url,
                         json={
                             'leaseId': lease_data['lease_id']
                         },

                         headers=request_headers)
if response.status_code == HTTPStatus.OK:
    print("3. File submit parse successfully.")
    print(response.json())
else:
    print(f'response={response.json()}')
    print(f'code={response.status_code}')

错误码

请参见错误码-通义数据挖掘
Managed Agents
数据连接
Skill
应用评测
应用广场
权限管理