跳到主要内容

文档上传


调用必须按照1.1.3. 认证测试章节描述的标准进行身份验证。注意以下事项:

  • 发送到 header 签名中的变量 md5_hash(v1 认证中为 md5_body)的值应为所发送文件二进制数据的 MD5 值
  • 文件的二进制数据必须作为 FormData 发送在请求体中,键名使用字符串 "file",值为要发送的文件。(此内容不加密)
  • 在此调用的响应体中将返回一个 GUID,即文档标识符(以下称为 DOCUMENT_KEY),需保存以备后续使用。

Request

ENDPOINT
/upload
MÉTODO
POST
Response Body
{
"document_key": "cfbc8469-89ea-4a80-9f64-ba7b1566c68b",
"document_md5": "cd451103fa512frc98ce684d3896698c"
}
注意

请记住保存 document_key,该密钥是查询文档时所必需的。

调用示例

以下是从 URL 上传图片的示例。


import jwt
import hashlib
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
import json
from datetime import datetime

BASE_URL = "https://api-auth.sandbox.qitech.app"
API_KEY = "4c268c0a-53ff-429b-92b6-47ef98a6d89a" # 此密钥仅为示例,请使用您自己的密钥
CLIENT_PRIVATE_KEY = ''''
-----BEGIN EC PRIVATE KEY-----
MIHbAgEBBEHh1hIeOPE5XNNhn6bxRAmVswsPZ0wZCmzVvP8Tl/LZK9ofVmRVGzll
srU1uezJEyHKYdOHrE2p52xUj+pHzjJvb6AHBgUrgQQAI6GBiQOBhgAEAAofUz1J
hBSOyGHLsnV9Sz0DSWmhl7U+ljqbfa8PKVFWSV3w16I1v2zME5/UzUhHn1gWsjnv
7/ekcLLAQbvqMPNXAfjIhFXLAPzqbB9iCuVua1v0Vgy52rBemOWrJka/Ws2bnKR8
h1N1OxOYeYr6C2jqMygBLktKMAs+282CEiEb4bIv
-----END EC PRIVATE KEY-----
''' # 此密钥仅为示例,请使用您自己的密钥

def get_document(url):
try:
response = requests.get(url)
return response.content
except Exception as error:
print("Error fetching document:", error)
raise

def upload_document(array_buffer):
endpoint = "/upload"
method = "POST"
timestamp = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
md5_hash = hashlib.md5(array_buffer).hexdigest()

jwt_header = {
"typ": "JWT",
"alg": "ES512",
}

jwt_body = {
"payload_md5": md5_hash,
"timestamp": timestamp,
"method": method,
"uri": endpoint,
}

encoded_header_token = jwt.encode(jwt_body, CLIENT_PRIVATE_KEY, algorithm="ES512", headers=jwt_header)

signed_header = {
"Authorization": encoded_header_token,
"API-CLIENT-KEY": API_KEY,
"Content-Type": "multipart/form-data",
}

url = f"{BASE_URL}{endpoint}"
multipart_data = MultipartEncoder(
fields={'file': ('image.jpeg', array_buffer, 'image/jpeg')}
)
signed_header['Content-Type'] = multipart_data.content_type

try:
response = requests.post(url, headers=signed_header, data=multipart_data)
response_data = response.json()
document_key = response_data.get('document_key')
print(f'Response data is: {response_data} and document_key is: {document_key}')
return document_key
except Exception as error:
print('Error:', error)
raise


def main():
file_url = "{FILE_URL}"

document_buffer = get_document(file_url)

document_key = upload_document(document_buffer)

print("document_key is", document_key)

if __name__ == "__main__":
main()