postobject.tea (148 lines of code) (raw):

import Util; import OSSUtil; import FileForm; import XML; type @endpoint = string type @regionId = string type @protocol = string type @userAgent = string type @readTimeout = number type @connectTimeout = number type @httpProxy = string type @httpsProxy = string type @noProxy = string type @maxIdleConns = number type @hostModel = string type @addtionalHeaders = [ string ] model Config { credentialType?: string, securityToken?: string, accessKeyId: string, accessKeySecret: string, endpoint: string, protocol?: string, regionId: string, userAgent?: string, hostModel?: string, signatureVersion?: string, isEnableMD5?: boolean, isEnableCrc?: boolean, readTimeout?: number, connectTimeout?: number, localAddr?: string, httpProxy?: string, httpsProxy?: string, noProxy?: string, socks5Proxy?: string, socks5NetWork?: string, maxIdleConns?: number, addtionalHeaders?: [ string ], } init(config: Config){ if (Util.isUnset(config)) { throw { name = "ParameterMissing", message = "'config' can not be unset" }; } if (Util.empty(config.endpoint)) { throw { name = "ParameterMissing", message = "'config.endpoint' can not be empty" }; } if (Util.empty(config.regionId)) { throw { name = "ParameterMissing", message = "'config.regionId' can not be empty" }; } @endpoint = config.endpoint; @protocol = config.protocol; @regionId = config.regionId; @userAgent = config.userAgent; @readTimeout = config.readTimeout; @connectTimeout = config.connectTimeout; @httpProxy = config.httpProxy; @httpsProxy = config.httpsProxy; @noProxy = config.noProxy; @maxIdleConns = config.maxIdleConns; @addtionalHeaders = config.addtionalHeaders; } model PostObjectRequest = { bucketName: string(description='BucketName', name='BucketName', pattern='[a-zA-Z0-9-_]+'), header: { accessKeyId: string(description='OSSAccessKeyId', name='OSSAccessKeyId'), policy: string(description='policy', name='policy'), signature: string(description='Signature', name='Signature'), successActionStatus?: string(description='success_action_status', name='success_action_status'), file: FileForm.FileField, key: string(description='key', name='key'), userMeta?: map[string]string(description='UserMeta', name='UserMeta') }(description='header', name='header') } model PostObjectResponse = { postResponse: { bucket: string(description='Bucket', name='Bucket'), eTag: string(description='ETag', name='ETag'), location: string(description='Location', name='Location'), }(description='PostResponse', name='PostResponse'), } api postObject(request: PostObjectRequest, runtime: OSSUtil.RuntimeOptions): PostObjectResponse { var boundary = FileForm.getBoundary(); __request.protocol = @protocol; __request.method = 'POST'; __request.pathname = `/`; __request.headers = { host = OSSUtil.getHost(request.bucketName, @regionId, @endpoint, @hostModel), date = Util.getDateUTCString(), user-agent = getUserAgent(), }; __request.headers.content-type = `multipart/form-data; boundary=${boundary}`; var form = { OSSAccessKeyId = request.header.accessKeyId, policy = request.header.policy, Signature = request.header.signature, key = request.header.key, success_action_status = request.header.successActionStatus, file = request.header.file, ...OSSUtil.toMeta(request.header.userMeta, 'x-oss-meta-'), }; __request.body = FileForm.toFileForm(form, boundary); } returns { var respMap : object = null; var bodyStr = Util.readAsString(__response.body); if (Util.is4xx(__response.statusCode) || Util.is5xx(__response.statusCode)) { respMap = OSSUtil.getErrMessage(bodyStr); throw { code = respMap.Code, message = respMap.Message, data = { httpCode = __response.statusCode, requestId = respMap.RequestId, hostId = respMap.HostId, } }; } respMap = XML.parseXml(bodyStr, PostObjectResponse); return { ...respMap, }; } runtime { timeouted = 'retry', readTimeout = Util.defaultNumber(runtime.readTimeout, @readTimeout), connectTimeout = Util.defaultNumber(runtime.connectTimeout, @connectTimeout), httpProxy = Util.defaultString(runtime.httpProxy, @httpProxy), httpsProxy = Util.defaultString(runtime.httpsProxy, @httpsProxy), noProxy = Util.defaultString(runtime.noProxy, @noProxy), maxIdleConns = Util.defaultNumber(runtime.maxIdleConns, @maxIdleConns), retry = { retryable = runtime.autoretry, maxAttempts = Util.defaultNumber(runtime.maxAttempts, 3) }, backoff = { policy = Util.defaultString(runtime.backoffPolicy, 'no'), period = Util.defaultNumber(runtime.backoffPeriod, 1) }, ignoreSSL = runtime.ignoreSSL }