Skip to content

接口说明

1.文件上传临时凭证

获取临时动态文件上传凭证,用于后续提交文档解析的操作。

⚠️ 注意:文件上传临时凭证有效期10分钟,请及时使用,过期后需要重新生成。

1.1端点信息

项目内容
URLGET /acx/llm/v1/upload/presign
Content-Typeapplication/json
认证Authorization: Bearer <API Key>

1.2请求参数

Header 参数

名称类型必填示例值
Content-Typestringapplication/json
AuthorizationstringBearer <API Key>
Params 参数
名称类型必填描述
file_namestring文件名

1.3 请求体示例

shell

curl 'https://api.scnet.cn/api/llm/v1/upload/presign?file_name=xxxxx.pdf' \
--header 'Authorization: <API Key>'

1.4 响应参数

参数名称参数类型描述
codeString应答码
msgString应答信息
dataObject应答数据体
     file_urlString文件地址
     upload_urlString上传文件服务地址
     x_amz_dateString时间戳
     x_amz_signatureString上传签名
     x_amz_algorithmString加密方式
     keyString文件key
     x_amz_credentialString签名凭证
     policyString上传策略

1.5 响应示例

成功响应
json
{
  "code": "0",
  "msg": "success",
  "data": {
    "x_amz_date": "20260518T074807Z",
    "upload_url": "https://oss.ksai.scnet.cn:58043/ocr",
    "x_amz_signature": "1dd3481914fb3cb51f175dfcf13454f642fe8b0445d2d8ba86d4c137eef28029",
    "file_url": "https://oss.ksai.scnet.cn:58043/ocr/doc/2046166062322159617/wx.pdf?response-content-disposition=attachment&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20260518%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260518T074808Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=44961dc3b8ef72f90636e2ec8d2f1ee62f5b12f915a8c817211f0855a89d4c97",
    "x_amz_algorithm": "AWS4-HMAC-SHA256",
    "key": "/doc/2046166062322159617/",
    "x_amz_credential": "admin/20260518/us-east-1/s3/aws4_request",
    "policy": "eyJleHBpcmF0aW9uIjoiMjAyNi0wNS0xOFQwODo0ODowNy45MzFaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0Iiwib2NyIl0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCIvZG9jLzIwNDYxNjYwNjIzMjIxNTk2MTcvd3gucGRmIl0sWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MF0sWyJlcSIsIiR4LWFtei1hbGdvcml0aG0iLCJBV1M0LUhNQUMtU0hBMjU2Il0sWyJlcSIsIiR4LWFtei1jcmVkZW50aWFsIiwiYWRtaW4vMjAyNjA1MTgvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJdLFsiZXEiLCIkeC1hbXotZGF0ZSIsIjIwMjYwNTE4VDA3NDgwN1oiXV19"
  }
}

2.文件上传

根据临时动态文件上传临时凭证,上传文件。

⚠️ 注意:文件上传生成的文件地址,有效期48小时,请及时使用,过期后需要重新上传文件。

2.1端点信息

项目内容
URLPOST <文件上传临时凭证接口中返回的upload_url字段值>
Content-Typemultipart/form-data

2.2请求参数

Header 参数

名称类型必填示例值
Content-Typestringmultipart/form-data
Form 参数
名称类型必填描述
policystring文件上传临时凭证接口中返回的policy字段值
x-amz-algorithmstring文件上传临时凭证接口中返回的x_amz_algorithm字段值
x-amz-credentialstring文件上传临时凭证接口中返回的x_amz_credential字段值
x-amz-datestring文件上传临时凭证接口中返回的x_amz_date字段值
x-amz-signaturestring文件上传临时凭证接口中返回的x_amz_signature字段值
keystring文件上传临时凭证接口中返回的key字段值
filestring用户本地需要上传的文件

2.3 请求体示例

shell

curl '<文件上传临时凭证接口中返回的upload_url字段值>' \
--form 'policy=<文件上传临时凭证接口中返回的policy字段值>' \
--form 'x-amz-algorithm=<文件上传临时凭证接口中返回的x_amz_algorithm字段值>' \
--form 'x-amz-credential=<文件上传临时凭证接口中返回的x_amz_credential字段值>' \
--form 'x-amz-date=<文件上传临时凭证接口中返回的x_amz_date字段值>' \
--form 'x-amz-signature=<文件上传临时凭证接口中返回的x_amz_signature字段值>' \
--form 'key=<文件上传临时凭证接口中返回的key字段值 >' \
--form 'file=@<本地文件>'

2.4 python完整请求体示例

python

import requests

API_KEY = "<替换为你的真实API>"  
LOCAL_FILE_PATH = "<替换为你要上传的本地文件路径>"  
UPLOAD_PRESIGN_API_URL = "https://api.scnet.cn/api/llm/v1/upload/presign"

def get_upload_presign(file_name: str):
    """
    第一步:获取文件上传临时凭证(有效期5分钟)
    :param file_name: 文件名(如 test.pdf)
    :return: 凭证字典 data
    """
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {API_KEY}"
    }

    params = {
        "file_name": file_name
    }

    try:
        response = requests.get(UPLOAD_PRESIGN_API_URL, headers=headers, params=params, timeout=10)
        response.raise_for_status()
        result = response.json()

        if result.get("code") != "0":
            raise Exception(f"获取凭证失败:{result.get('msg')}")

        print("✅ 获取上传凭证成功")
        return result["data"]

    except Exception as e:
        print(f"❌ 获取凭证异常:{str(e)}")
        raise

def upload_file(presign_data: dict, local_file_path: str):
    """
    第二步:使用临时凭证上传文件
    :param presign_data: 第一步获取的凭证数据
    :param local_file_path: 本地文件路径
    :return: 上传结果
    """
    # 从凭证中提取字段
    upload_url = presign_data["upload_url"]
    policy = presign_data["policy"]
    x_amz_algorithm = presign_data["x_amz_algorithm"]
    x_amz_credential = presign_data["x_amz_credential"]
    x_amz_date = presign_data["x_amz_date"]
    x_amz_signature = presign_data["x_amz_signature"]
    key = presign_data["key"]

    # 构造表单数据
    form_data = {
        "policy": policy,
        "x-amz-algorithm": x_amz_algorithm,
        "x-amz-credential": x_amz_credential,
        "x-amz-date": x_amz_date,
        "x-amz-signature": x_amz_signature,
        "key": key,
        "file": (os.path.basename(local_file_path), open(local_file_path, "rb"))
    }

    try:
        print(f"📤 开始上传文件:{local_file_path}")
        response = requests.post(upload_url, files=form_data, timeout=30)

        if response.status_code in (200, 204):
            print("✅ 文件上传成功")
            return {
                "file_url": presign_data["file_url"],
                "upload_status": "success"
            }
        else:
            raise Exception(f"上传失败,状态码:{response.status_code},返回:{response.text}")

    except Exception as e:
        print(f"❌ 文件上传异常:{str(e)}")
        raise

if __name__ == "__main__":
    # 1. 获取文件名
    file_name = os.path.basename(LOCAL_FILE_PATH)

    # 2. 获取上传凭证
    presign = get_upload_presign(file_name)

    # 3. 上传文件
    upload_result = upload_file(presign, LOCAL_FILE_PATH)

    # 4. 输出最终结果
    print("\n" + "=" * 50)
    print("📄 最终文件信息:")
    print(f"文件地址:{upload_result['file_url']}")

6.错误码说明

错误码(Code)HTTP状态码错误含义触发场景处理建议
AccessDenied403访问被拒绝1. AccessKey/SecretKey错误
2. 权限策略不允许上传
3. 桶策略禁止写入
校验凭证、检查IAM/桶权限策略
SignatureDoesNotMatch403签名不匹配1. 密钥错误
2. 客户端与服务端时间偏差过大
3. 请求参数被篡改
核对密钥、同步时间、排查请求拦截
InvalidObjectName400无效对象名文件名称、路径含非法字符或长度超限统一规范文件命名格式
MalformedPOSTRequest400POST请求格式错误表单、分片上传参数格式异常修正请求参数结构与格式
MaxMessageLengthExceeded400请求体过大单次上传文件超出服务端限额拆分文件,采用分片上传
EntityTooLarge413实体过大文件大小超出桶或服务配置上限调整文件大小
MissingContentLength411缺少Content-Length请求未携带文件大小头部信息补充文件长度请求头参数
RequestTimeout408请求超时网络波动、文件偏大、服务响应迟缓检查文件是否过大,或联系客服处理
InternalError500服务端内部错误磁盘故障、服务宕机、集群异常稍后重试,或联系客服处理
SlowDown503请求限流上传并发量过高,服务负载饱和稍后重试,或联系客服处理
ServiceUnavailable503服务不可用集群离线、磁盘只读、节点故障稍后重试,或联系客服处理