Skip to content

上传应用图片文件

适用版本 >=v7.0.2603.20260326

接口说明:该接口用于上传应用图标,供后续创建企业自建应用接口使用。

请求说明

请求地址配置域名+/openapi+/v7/developer/app_logos/upload
请求方法POST
签名方式KSO-1(配置域名+/openapi不参与签名)
权限要求应用同步管理(应用授权) kso.app_sync.readwrite

请求头(Header)

Header参数类型是否必填说明
Content-Typestring固定为:multipart/form-data; boundary=<boundary值>,boundary 由调用方自行定义,需与请求体中的分隔符保持一致
X-Kso-DatestringRFC1123 格式的日期,例: Wed, 23 Jan 2013 06:43:08 GMT
X-Kso-AuthorizationstringKSO-1 签名值,详见《签名方法》
Authorizationstring授权凭证,格式为:Bearer {access_token}

请求体(Body)

请求体格式: multipart/form-data

名称类型是否必填说明
filefile文件二进制流,支持 JPG/PNG/SVG,最大 300KB

签名说明

文件上传接口与普通 JSON 接口的签名区别:

  1. Content-Type 使用完整值(含 boundary),如 multipart/form-data; boundary=---7MA4YWxkTrZu0gW
  2. RequestBody 不参与签名,sha256(RequestBody) 部分取空串
  3. boundary 由调用方自行定义,需保证请求头 Content-Type、签名计算、请求体分隔符三者完全一致
  4. 请求体需由调用方按照 multipart 格式手动拼装,不要使用 HTTP 库自动生成的 multipart 功能

请求示例

HTTP 示例

json
POST /v7/developer/app_logos/upload HTTP/1.1
Host: openapi.wps.cn
Authorization: Bearer <access_token>
Content-Type: multipart/form-data; boundary=---7MA4YWxkTrZu0gW
X-Kso-Date: Thu, 12 Feb 2026 02:54:22 GMT
X-Kso-Authorization: KSO-1 <accessKey>:<signature>

---7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="logo.jpg"
Content-Type: application/octet-stream

<二进制文件内容>
---7MA4YWxkTrZu0gW--

Python 示例

python
import uuid
import hmac
import hashlib
import requests
from datetime import datetime, timezone

access_key = "AK****************"
secret_key = "SK********************************"
token = "<access_token>"
file_path = "/path/to/logo.jpg"

# 自定义 boundary
boundary = uuid.uuid4().hex
content_type = f"multipart/form-data; boundary={boundary}"
kso_date = datetime.now(timezone.utc).strftime("%a, %d %b %Y %H:%M:%S GMT")
method = "POST"
uri = "/v7/developer/app_logos/upload"

# 签名计算(文件上传 Body 不参与签名,sha256 部分取空串)
sign_str = f"KSO-1{method}{uri}{content_type}{kso_date}"
signature = hmac.new(secret_key.encode(), sign_str.encode(), hashlib.sha256).hexdigest()

# 手动拼装 multipart body
with open(file_path, "rb") as f:
    file_data = f.read()

body = (
    f"--{boundary}\r\n"
    f'Content-Disposition: form-data; name="file"; filename="logo.jpg"\r\n'
    f"Content-Type: application/octet-stream\r\n\r\n"
).encode() + file_data + f"\r\n--{boundary}--\r\n".encode()

# 发送请求
headers = {
    "Content-Type": content_type,
    "X-Kso-Date": kso_date,
    "X-Kso-Authorization": f"KSO-1 {access_key}:{signature}",
    "Authorization": f"Bearer {token}",
}
resp = requests.post(f"https://openapi.wps.cn{uri}",
                     headers=headers, data=body, verify=False)
print(resp.json())

响应体(Response)

名称类型说明
codeintegercode
msgstringmsg
dataobjectnull
∟ keystring上传成功后返回的文件 Key

响应体示例

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "key": "string"
  }
}