@@ -531,6 +531,7 @@ var formatParams = function (apiName, params) {
531531 'x-cos-grant-write-acp' : 'GrantWriteAcp' ,
532532 'x-cos-storage-class' : 'StorageClass' ,
533533 'x-cos-traffic-limit' : 'TrafficLimit' ,
534+ 'x-cos-mime-limit' : 'MimeLimit' ,
534535 // SSE-C
535536 'x-cos-server-side-encryption-customer-algorithm' : 'SSECustomerAlgorithm' ,
536537 'x-cos-server-side-encryption-customer-key' : 'SSECustomerKey' ,
@@ -740,6 +741,13 @@ var isNode = function () {
740741 return typeof window !== 'object' && typeof process === 'object' && "function" === 'function' ;
741742} ;
742743
744+ var isCIHost = function ( url ) {
745+ if ( url && url . split ( '?' ) [ 0 ] . match ( / ( .c i .| c i .| .c i ) / g) ) {
746+ return true ;
747+ }
748+ return false ;
749+ } ;
750+
743751var util = {
744752 noop : noop ,
745753 formatParams : formatParams ,
@@ -772,7 +780,8 @@ var util = {
772780 parseSelectPayload : parseSelectPayload ,
773781 getSourceParams : getSourceParams ,
774782 isBrowser : true ,
775- isNode : isNode
783+ isNode : isNode ,
784+ isCIHost : isCIHost
776785} ;
777786
778787module . exports = util ;
@@ -2441,7 +2450,7 @@ base.init(COS, task);
24412450advance . init ( COS , task ) ;
24422451
24432452COS . getAuthorization = util . getAuth ;
2444- COS . version = '1.2.20 ' ;
2453+ COS . version = '1.3.0 ' ;
24452454
24462455module . exports = COS ;
24472456
@@ -7712,7 +7721,9 @@ function request(params, callback) {
77127721 action : params . Action ,
77137722 headers : params . Headers ,
77147723 qs : params . Query ,
7715- body : params . Body
7724+ body : params . Body ,
7725+ Url : params . Url ,
7726+ rawBody : params . RawBody
77167727 } , function ( err , data ) {
77177728 if ( err ) return callback ( err ) ;
77187729 if ( data && data . body ) {
@@ -7723,6 +7734,57 @@ function request(params, callback) {
77237734 } ) ;
77247735}
77257736
7737+ /**
7738+ * 追加上传
7739+ * @param {Object } params 参数对象,必须
7740+ * @param {String } params.Bucket Bucket名称,必须
7741+ * @param {String } params.Region 地域名称,必须
7742+ * @param {String } params.Key object名称,必须
7743+ * @param {File || Blob || String } params.Body 上传文件对象或字符串
7744+ * @param {Number } params.Position 追加操作的起始点,单位为字节,必须
7745+ * @param {String } params.CacheControl RFC 2616 中定义的缓存策略,将作为 Object 元数据保存,非必须
7746+ * @param {String } params.ContentDisposition RFC 2616 中定义的文件名称,将作为 Object 元数据保存,非必须
7747+ * @param {String } params.ContentEncoding RFC 2616 中定义的编码格式,将作为 Object 元数据保存,非必须
7748+ * @param {String } params.ContentLength RFC 2616 中定义的 HTTP 请求内容长度(字节),必须
7749+ * @param {String } params.ContentType RFC 2616 中定义的内容类型(MIME),将作为 Object 元数据保存,非必须
7750+ * @param {String } params.Expect 当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容,非必须
7751+ * @param {String } params.Expires RFC 2616 中定义的过期时间,将作为 Object 元数据保存,非必须
7752+ * @param {String } params.ACL 允许用户自定义文件权限,有效值:private | public-read,非必须
7753+ * @param {String } params.GrantRead 赋予被授权者读取对象的权限,格式:id="[OwnerUin]",可使用半角逗号(,)分隔多组被授权者,非必须
7754+ * @param {String } params.GrantReadAcp 赋予被授权者读取对象的访问控制列表(ACL)的权限,格式:id="[OwnerUin]",可使用半角逗号(,)分隔多组被授权者,非必须
7755+ * @param {String } params.GrantWriteAcp 赋予被授权者写入对象的访问控制列表(ACL)的权限,格式:id="[OwnerUin]",可使用半角逗号(,)分隔多组被授权者,非必须
7756+ * @param {String } params.GrantFullControl 赋予被授权者操作对象的所有权限,格式:id="[OwnerUin]",可使用半角逗号(,)分隔多组被授权者,非必须
7757+ * @param {String } params.StorageClass 设置对象的存储级别,枚举值:STANDARD、STANDARD_IA、ARCHIVE,默认值:STANDARD,非必须
7758+ * @param {String } params.x-cos-meta-* 允许用户自定义的头部信息,将作为对象的元数据保存。大小限制2KB,非必须
7759+ * @param {String } params.ContentSha1 RFC 3174 中定义的 160-bit 内容 SHA-1 算法校验,非必须
7760+ * @param {String } params.ServerSideEncryption 支持按照指定的加密算法进行服务端数据加密,格式 x-cos-server-side-encryption: "AES256",非必须
7761+ * @param {Function } callback 回调函数,必须
7762+ * @return {Object } err 请求失败的错误,如果请求成功,则为空。https://cloud.tencent.com/document/product/436/7730
7763+ * @return {Object } data 返回的数据
7764+ */
7765+ function appendObject ( params , callback ) {
7766+ // 特殊处理 Cache-Control、Content-Type,避免代理更改这两个字段导致写入到 Object 属性里
7767+ var headers = params . Headers ;
7768+ if ( ! headers [ 'Cache-Control' ] && ! headers [ 'cache-control' ] ) headers [ 'Cache-Control' ] = '' ;
7769+ if ( ! headers [ 'Content-Type' ] && ! headers [ 'content-type' ] ) headers [ 'Content-Type' ] = params . Body && params . Body . type || '' ;
7770+ submitRequest . call ( this , {
7771+ Action : 'name/cos:AppendObject' ,
7772+ method : 'POST' ,
7773+ Bucket : params . Bucket ,
7774+ Region : params . Region ,
7775+ action : 'append' ,
7776+ Key : params . Key ,
7777+ body : params . Body ,
7778+ qs : {
7779+ position : params . Position
7780+ } ,
7781+ headers : params . Headers
7782+ } , function ( err , data ) {
7783+ if ( err ) return callback ( err ) ;
7784+ callback ( null , data ) ;
7785+ } ) ;
7786+ }
7787+
77267788/**
77277789 * 获取签名
77287790 * @param {Object } params 参数对象,必须
@@ -8189,7 +8251,8 @@ function submitRequest(params, callback) {
81898251 delete params . headers [ 'token' ] ;
81908252 delete params . headers [ 'clientIP' ] ;
81918253 delete params . headers [ 'clientUA' ] ;
8192- delete params . headers [ 'x-cos-security-token' ] ;
8254+ params . headers [ 'x-cos-security-token' ] && delete params . headers [ 'x-cos-security-token' ] ;
8255+ params . headers [ 'x-ci-security-token' ] && delete params . headers [ 'x-ci-security-token' ] ;
81938256 }
81948257 next ( tryTimes + 1 ) ;
81958258 } else {
@@ -8211,7 +8274,7 @@ function _submitRequest(params, callback) {
82118274 var region = params . Region ;
82128275 var object = params . Key ;
82138276 var method = params . method || 'GET' ;
8214- var url = params . url ;
8277+ var url = params . Url || params . url ;
82158278 var body = params . body ;
82168279 var rawBody = params . rawBody ;
82178280
@@ -8246,12 +8309,18 @@ function _submitRequest(params, callback) {
82468309 body : body
82478310 } ;
82488311
8312+ // 兼容ci接口
8313+ var token = 'x-cos-security-token' ;
8314+ if ( util . isCIHost ( url ) ) {
8315+ token = 'x-ci-security-token' ;
8316+ }
8317+
82498318 // 获取签名
82508319 opt . headers . Authorization = params . AuthData . Authorization ;
82518320 params . AuthData . Token && ( opt . headers [ 'token' ] = params . AuthData . Token ) ;
82528321 params . AuthData . ClientIP && ( opt . headers [ 'clientIP' ] = params . AuthData . ClientIP ) ;
82538322 params . AuthData . ClientUA && ( opt . headers [ 'clientUA' ] = params . AuthData . ClientUA ) ;
8254- params . AuthData . SecurityToken && ( opt . headers [ 'x-cos-security- token' ] = params . AuthData . SecurityToken ) ;
8323+ params . AuthData . SecurityToken && ( opt . headers [ token ] = params . AuthData . SecurityToken ) ;
82558324
82568325 // 清理 undefined 和 null 字段
82578326 opt . headers && ( opt . headers = util . clearKey ( opt . headers ) ) ;
@@ -8433,6 +8502,7 @@ var API_MAP = {
84338502 getObjectTagging : getObjectTagging ,
84348503 deleteObjectTagging : deleteObjectTagging ,
84358504 selectObjectContent : selectObjectContent ,
8505+ appendObject : appendObject ,
84368506
84378507 // 分块上传相关方法
84388508 uploadPartCopy : uploadPartCopy ,
0 commit comments