Skip to content

Commit 5f27b00

Browse files
authored
Merge pull request #281 from disoul/feature/changeheaders
BucketManager: add changeHeaders
2 parents a18a082 + 4a13609 commit 5f27b00

File tree

4 files changed

+140
-0
lines changed

4 files changed

+140
-0
lines changed

docs/nodejs-sdk-v7.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,30 @@ bucketManager.changeMime(bucket, key, newMime, function(err, respBody, respInfo)
499499
});
500500
```
501501

502+
<a id="rs-chgm-h"></a>
503+
## 修改文件Headers
504+
505+
```
506+
var bucket = 'if-pbl';
507+
var key = 'qiniu.mp4';
508+
var headers = {
509+
'Content-Type': 'application/octet-stream',
510+
'Last-Modified': 'Web, 21 Oct 2015 07:00:00 GMT',
511+
'x-custom-header-xx': 'value',
512+
};
513+
514+
bucketManager.changeHeaders(bucket, key, headers, function(err, respBody, respInfo) {
515+
if (err) {
516+
console.log(err);
517+
//throw err;
518+
} else {
519+
//200 is success
520+
console.log(respInfo.statusCode);
521+
console.log(respBody);
522+
}
523+
});
524+
```
525+
502526
<a id="rs-chtype"></a>
503527
## 修改文件存储类型
504528

index.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,17 @@ export declare namespace rs {
496496
*/
497497
changeMime(bucket: string, key: string, newMime: string, callback: callback): void;
498498

499+
/**
500+
* 修改文件的Headers
501+
* @see TODO
502+
*
503+
* @param bucket 空间名称
504+
* @param key 文件名称
505+
* @param headers Headers对象
506+
* @param callback
507+
*/
508+
changeHeaders(bucket: string, key: string, headers: { [k: string]: string }, callback: callback): void;
509+
499510
/**
500511
* 移动或重命名文件,当bucketSrc==bucketDest相同的时候,就是重命名文件操作
501512
* @see https://developer.qiniu.com/kodo/api/1288/move
@@ -658,6 +669,14 @@ export declare namespace rs {
658669
*/
659670
function changeMimeOp(bucket: string, key: string, newMime: string): string;
660671

672+
/**
673+
*
674+
* @param bucket
675+
* @param key
676+
* @param headers
677+
*/
678+
function changeHeadersOp(bucket: string, key: string, headers: { [k: string]: string }): string;
679+
661680
/**
662681
*
663682
* @param bucket

qiniu/storage/rs.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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,19 @@ 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 path = '/chgm/' + encodedEntryURI;
650+
for (var headerKey in headers) {
651+
var encodedValue = util.urlsafeBase64Encode(headers[headerKey]);
652+
var prefixedHeaderKey = prefix + headerKey;
653+
path += "/" + prefixedHeaderKey + "/" + encodedValue;
654+
}
655+
656+
return path;
657+
}
658+
597659
exports.changeTypeOp = function(bucket, key, newType) {
598660
var encodedEntryURI = util.encodedEntry(bucket, key);
599661
return '/chtype/' + encodedEntryURI + '/type/' + newType;

test/rs.test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,39 @@ describe('test start bucket manager', function() {
105105
});
106106
});
107107
});
108+
109+
describe('test changeMime', function() {
110+
it('test changeMime', function(done) {
111+
var key = "test_file";
112+
var bucket = srcBucket;
113+
114+
bucketManager.changeMime(bucket, key, "text/html",
115+
function (err, respBody, respInfo) {
116+
should.not.exist(err);
117+
assert.equal(respInfo.statusCode, 200);
118+
done();
119+
}
120+
);
121+
});
122+
});
123+
124+
describe('test changeHeaders', function() {
125+
it('test changeHeaders', function(done) {
126+
var key = "test_file";
127+
var bucket = srcBucket;
128+
129+
bucketManager.changeHeaders(bucket, key, {
130+
'Content-Type': 'text/plain',
131+
'Last-Modified': 'Wed, 21 Oct 2015 07:28:00 GMT',
132+
'x-qn-test-custom-header': '0',
133+
},
134+
function (err, respBody, respInfo) {
135+
console.log(respInfo);
136+
should.not.exist(err);
137+
assert.equal(respInfo.statusCode, 200);
138+
done();
139+
}
140+
);
141+
});
142+
});
108143
});

0 commit comments

Comments
 (0)