Skip to content

Commit 2b74090

Browse files
authored
Merge pull request #194 from liangchaoboy/multiZone
Multi zone
2 parents a5286ab + 3f35a49 commit 2b74090

File tree

6 files changed

+81
-4
lines changed

6 files changed

+81
-4
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
## CHANGE LOG
22

3+
### v6.1.12
4+
5+
2016-10-10
6+
7+
- 增加多机房接口调用支持
8+
39
### v6.1.11
410

511
2016-05-06

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ module.exports = {
1111
fop: require(libpath + '/fop.js'),
1212
conf: require(libpath + '/conf.js'),
1313
rpc: require(libpath + '/rpc.js'),
14-
util: require(libpath + '/util.js')
14+
util: require(libpath + '/util.js'),
15+
zone: require(libpath + '/zone.js')
1516
};

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "qiniu",
3-
"version": "6.1.11",
3+
"version": "6.1.12",
44
"description": "Node wrapper for Qiniu Resource (Cloud) Storage API",
55
"main": "index.js",
66
"directories": {
@@ -58,7 +58,8 @@
5858
"mime": "1.2.9",
5959
"formstream": "0.0.7",
6060
"crc32": "0.2.2",
61-
"urllib": "0.5.1"
61+
"urllib": "0.5.1",
62+
"sync-request":"3.0.1"
6263
},
6364
"devDependencies": {
6465
"should": "1.2.2",

qiniu/conf.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@ var ua = function() {
1111
}
1212

1313
exports.USER_AGENT = ua();
14-
1514
exports.UP_HOST = 'http://upload.qiniu.com';
1615
exports.RS_HOST = 'http://rs.qbox.me';
1716
exports.RSF_HOST = 'http://rsf.qbox.me';
1817
exports.API_HOST = 'http://api.qiniu.com';
1918
exports.RPC_TIMEOUT = 3600000; // default rpc timeout: one hour
19+
exports.UC_HOST = 'http://uc.qbox.me';
20+
exports.UP_HTTPS_HOST = 'https://up-z1.qbox.me';
21+
exports.SCHEME = 'http'; // 上传使用的协议
22+
exports.AUTOZONE = true; // 自动获取不同机房空间的上传域名
23+
exports.BUCKET = null ; // 上传空间
24+
exports.EXPIRE = 0;

qiniu/io.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ var url = require('url');
77
var mime = require('mime');
88
var Readable = require('stream').Readable;
99
var formstream = require('formstream');
10+
var urllib = require('urllib');
11+
var zone = require('./zone');
1012

1113
exports.UNDEFINED_KEY = '?'
1214
exports.PutExtra = PutExtra;
@@ -49,10 +51,13 @@ function putReadable (uptoken, key, rs, extra, onret) {
4951
});
5052

5153
var form = getMultipart(uptoken, key, rs, extra);
54+
// 设置上传域名
55+
zone.up_host(uptoken, conf);
5256

5357
return rpc.postMultipart(conf.UP_HOST, form, onret);
5458
}
5559

60+
5661
function put(uptoken, key, body, extra, onret) {
5762
var rs = new Readable();
5863
rs.push(body);

qiniu/zone.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
var request = require('sync-request');
2+
3+
//conf 为全局变量
4+
exports.up_host = function (uptoken, conf){
5+
6+
var version = process.versions;
7+
var num = version.node.split(".")[0];
8+
9+
// node 版本号低于 1.0.0, 使用默认域名上传,可以在conf中指定上传域名
10+
if(num < 1 ){
11+
conf.AUTOZONE = false;
12+
}
13+
14+
if(!conf.AUTOZONE){
15+
return;
16+
}
17+
18+
var ak = uptoken.toString().split(":")[0];
19+
var tokenPolicy = uptoken.toString().split(":")[2];
20+
var tokenPolicyStr = new Buffer(tokenPolicy, 'base64').toString();
21+
var json_tokenPolicyStr = JSON.parse(tokenPolicyStr);
22+
var bucket = json_tokenPolicyStr.scope;
23+
24+
// bucket 相同,上传域名仍在过期时间内
25+
if((new Date().getTime() < conf.EXPIRE) && bucket == conf.BUCKET){
26+
return;
27+
}
28+
29+
//记录bucket名
30+
conf.BUCKET = bucket;
31+
32+
var res = request('GET', 'http://uc.qbox.me/v1/query?ak=' + ak + '&bucket=' + bucket, {
33+
'headers': {
34+
'Content-Type': 'application/json'
35+
}
36+
});
37+
38+
if(res.statusCode == 200){
39+
40+
var json_str = JSON.parse(res.body.toString());
41+
42+
//判断设置使用的协议, 默认使用http
43+
if(conf.SCHEME == 'http'){
44+
conf.UP_HOST = json_str.http.up[1];
45+
}else{
46+
conf.UP_HOST = json_str.https.up[0];
47+
}
48+
49+
conf.EXPIRE = 86400 + new Date().getTime();
50+
51+
}else{
52+
var err = new Error('Server responded with status code ' + res.statusCode + ':\n' + res.body.toString());
53+
err.statusCode = res.statusCode;
54+
err.headers = res.headers;
55+
err.body = res.body;
56+
throw err;
57+
}
58+
59+
}

0 commit comments

Comments
 (0)