Skip to content

单步上传

适用版本>=v7.0.2412b.20241226

接口说明:单步上传文件

请求说明

请求地址配置域名+/openapi+/v7/filetransfer/file/upload
请求方法POST
签名方式KSO-1(配置域名+/openapi不参与签名)
权限要求文件摆渡(应用授权) kso.filetransfer.readwrite

请求头(Header)

名称参数类型是否必填说明
Content-Typestring使用:application/octet-stream
X-Kso-DatestringRFC1123 格式的日期,例: Wed, 23 Jan 2013 06:43:08 GMT
X-Kso-AuthorizationstringKSO-1 签名值,详见《签名方法》
Authorizationstring授权凭证,格式为:Bearer {access_token}
ENCRYPT_SKstring非对称加密后的对称加密密钥,非对称加密算法见下方示例

查询参数(Query)

名称参数类型是否必填说明
task_idstring传输任务ID,当以文件夹为整体传输时,需要先新建传输任务
boxstringoutbox:发件箱 或 inbox:收件箱
account_idstring三方用户ID
account_typestring可选值:third_user, 表示account_id为三方用户ID
outbox_company_idstring发件箱云文档租户ID, 当box=inbox时必传
outbox_file_idstring发件箱文件ID, 当box=inbox时必传
parent_idstring父目录文件ID
namestring文件名称,须包含文件后缀
sizestring文件大小, 单位字节
file_typestring文件类型, 可选值:file、folder
transfer_idstring传输ID

请求体(Body)

二进制文件流

响应体(Response)

名称类型说明
dataobject
file_idstring文件id
is_finishinteger是否完成,0:未完成,1:已完成
codeint错误码
msgstring状态信息
detailstring详细信息

响应体示例

json
{
  "data": {
    "file_id": "",
    "is_finish": 0
  },
  "msg": "ok",
  "code": 20000000
}

非对称加密签名示例

go
// 非对称加密函数
func RsaEncryptBase64(originalData, publicKey string) (string, error) {
	block, _ := pem.Decode([]byte(publicKey))
	if block == nil {
		return "", errors.ErrRsaPkDecodeFailed(zap.String("publicKey", publicKey))
	}

	pubKey, parseErr := x509.ParsePKIXPublicKey(block.Bytes)
	if parseErr != nil {
		return "", errors.ErrRsaPkParseFailed(zap.String("publicKey", publicKey))
	}

	// 获取密钥长度,计算最大加密块大小
	keySize := pubKey.(*rsa.PublicKey).Size()
	maxEncryptSize := keySize - 11

	// 将原始数据按块大小分段加密
	var encryptedData []byte
	for len(originalData) > 0 {
		segment := originalData
		if len(segment) > maxEncryptSize {
			segment = originalData[:maxEncryptSize]
		}

		encryptedSegment, err := rsa.EncryptPKCS1v15(rand.Reader, pubKey.(*rsa.PublicKey), []byte(segment))
		if err != nil {
			return "", errors.ErrRsaEncryptFailed(zap.String("publicKey", publicKey))
		}

		encryptedData = append(encryptedData, encryptedSegment...)
		originalData = originalData[len(segment):]
	}

	return base64.StdEncoding.EncodeToString(encryptedData), nil
}
// 调用示例
func encryptSk() (string, error) {
    // 对称加密密钥
    sk, err := encrypt.GenerateRandomString(32)
    if err != nil {
        return "", err
    }
    // 获取非对称加密公钥
    pk, err := getPk()
    if err != nil {
        return "", err
    }
    // 加密sk
    ssk, err := encrypt.RsaEncryptBase64(sk, pk)
    if err != nil {
        return "", err
    }
    return ssk, nil
}