@@ -110,6 +110,55 @@ function changeMimeReq(mac, config, bucket, key, newMime, callbackFunc) {
110110 rpc . postWithoutForm ( requestURI , digest , callbackFunc ) ;
111111}
112112
113+
114+ // 修改文件返回的Headers内容
115+ // @link TODO
116+ // @param bucket 空间名称
117+ // @param key 文件名称
118+ // @param headers 需要修改的headers
119+ // @param callbackFunc(err, respBody, respInfo) 回调函数
120+ BucketManager . prototype . changeHeaders = function ( bucket , key , headers ,
121+ callbackFunc ) {
122+ var useCache = false ;
123+ var that = this ;
124+ if ( this . config . zone ) {
125+ if ( this . config . zoneExpire == - 1 ) {
126+ useCache = true ;
127+ } else {
128+ if ( ! util . isTimestampExpired ( this . config . zoneExpire ) ) {
129+ useCache = true ;
130+ }
131+ }
132+ }
133+
134+ if ( useCache ) {
135+ changeHeadersReq ( this . mac , this . config , bucket , key , headers , callbackFunc ) ;
136+ } else {
137+ zone . getZoneInfo ( this . mac . accessKey , bucket , function ( err , cZoneInfo ,
138+ cZoneExpire ) {
139+ if ( err ) {
140+ callbackFunc ( err , null , null ) ;
141+ return ;
142+ }
143+
144+ //update object
145+ that . config . zone = cZoneInfo ;
146+ that . config . zoneExpire = cZoneExpire ;
147+ //req
148+ changeHeadersReq ( that . mac , that . config , bucket , key , headers ,
149+ callbackFunc ) ;
150+ } ) ;
151+ }
152+ }
153+
154+ function changeHeadersReq ( mac , config , bucket , key , headers , callbackFunc ) {
155+ var scheme = config . useHttpsDomain ? "https://" : "http://" ;
156+ var changeHeadersOp = exports . changeHeadersOp ( bucket , key , headers ) ;
157+ var requestURI = scheme + config . zone . rsHost + changeHeadersOp ;
158+ var digest = util . generateAccessToken ( mac , requestURI , null ) ;
159+ rpc . postWithoutForm ( requestURI , digest , callbackFunc ) ;
160+ }
161+
113162// 移动或重命名文件,当bucketSrc==bucketDest相同的时候,就是重命名文件操作
114163// @link https://developer.qiniu.com/kodo/api/1257/delete
115164// @param srcBucket 源空间名称
@@ -594,6 +643,20 @@ exports.changeMimeOp = function(bucket, key, newMime) {
594643 return '/chgm/' + encodedEntryURI + '/mime/' + encodedMime ;
595644}
596645
646+ exports . changeHeadersOp = function ( bucket , key , headers ) {
647+ var encodedEntryURI = util . encodedEntry ( bucket , key ) ;
648+ var prefix = 'x-qn-meta-!' ;
649+ var prefixReg = / ^ x \- q n \- m e t a \- \! / ;
650+ var path = '/chgm/' + encodedEntryURI ;
651+ for ( var headerKey in headers ) {
652+ var encodedValue = util . urlsafeBase64Encode ( headers [ headerKey ] ) ;
653+ var prefixedHeaderKey = headerKey . match ( prefixReg ) ? headerKey : prefix + headerKey ;
654+ path += "/" + prefixedHeaderKey + "/" + encodedValue ;
655+ }
656+
657+ return path ;
658+ }
659+
597660exports . changeTypeOp = function ( bucket , key , newType ) {
598661 var encodedEntryURI = util . encodedEntry ( bucket , key ) ;
599662 return '/chtype/' + encodedEntryURI + '/type/' + newType ;
0 commit comments