Skip to content

Commit 65622d8

Browse files
committed
Merge pull request #114 from codedogfish/fix_issues_from_20151101_to_20151203
Change upload url in case of net error
2 parents edb87ce + 4974e3d commit 65622d8

File tree

5 files changed

+148
-20
lines changed

5 files changed

+148
-20
lines changed

dist/qiniu.js

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* GitHub: http://github.com/qiniu/js-sdk
88
*
9-
* Date: 2015-12-28
9+
* Date: 2016-1-26
1010
*/
1111

1212
/*global plupload ,mOxie*/
@@ -48,7 +48,8 @@ function readCookie(key) {
4848
return null;
4949
}
5050

51-
51+
// if current browser is not support localStorage
52+
// use cookie to make a polyfill
5253
if ( !window.localStorage ) {
5354
window.localStorage = {
5455
setItem: function (key, value) {
@@ -67,13 +68,6 @@ function QiniuJsSDK() {
6768

6869
var that = this;
6970

70-
var qiniuUploadUrl;
71-
if (window.location.protocol === 'https:') {
72-
qiniuUploadUrl = 'https://up.qbox.me';
73-
} else {
74-
qiniuUploadUrl = 'http://upload.qiniu.com';
75-
}
76-
7771
/**
7872
* detect IE version
7973
* if current browser is not IE
@@ -142,6 +136,46 @@ function QiniuJsSDK() {
142136
}
143137

144138

139+
var qiniuUploadUrl;
140+
if (window.location.protocol === 'https:') {
141+
qiniuUploadUrl = 'https://up.qbox.me';
142+
} else {
143+
qiniuUploadUrl = 'http://upload.qiniu.com';
144+
}
145+
146+
/**
147+
* qiniu upload urls
148+
* 'qiniuUploadUrls' is used to change target when current url is not avaliable
149+
* @type {Array}
150+
*/
151+
var qiniuUploadUrls = [
152+
"http://upload.qiniu.com",
153+
"http://up.qiniu.com",
154+
];
155+
156+
var changeUrlTimes = 0;
157+
158+
/**
159+
* reset upload url
160+
* if current page protocal is https
161+
* it will always return 'https://up.qbox.me'
162+
* else
163+
* it will set 'qiniuUploadUrl' value with 'qiniuUploadUrls' looply
164+
*/
165+
this.resetUploadUrl = function(){
166+
if (window.location.protocol === 'https:') {
167+
qiniuUploadUrl = 'https://up.qbox.me';
168+
} else {
169+
var i = changeUrlTimes % qiniuUploadUrls.length;
170+
qiniuUploadUrl = qiniuUploadUrls[i];
171+
changeUrlTimes++;
172+
}
173+
logger.debug('resetUploadUrl: '+qiniuUploadUrl);
174+
};
175+
176+
this.resetUploadUrl();
177+
178+
145179
/**
146180
* is image
147181
* @param {String} url of a file
@@ -825,6 +859,24 @@ function QiniuJsSDK() {
825859

826860
logger.debug("bind ChunkUploaded event");
827861

862+
var retries = qiniuUploadUrls.length;
863+
864+
// if error is unkown switch upload url and retry
865+
var unknow_error_retry = function(file){
866+
if (retries-- > 0) {
867+
setTimeout(function(){
868+
that.resetUploadUrl();
869+
file.status = plupload.QUEUED;
870+
uploader.stop();
871+
uploader.start();
872+
}, 0);
873+
return true;
874+
}else{
875+
retries = qiniuUploadUrls.length;
876+
return false;
877+
}
878+
};
879+
828880
// bind 'Error' event
829881
// check the err.code and return the errTip
830882
uploader.bind('Error', (function(_Error_Handler) {
@@ -850,6 +902,9 @@ function QiniuJsSDK() {
850902
if (err.response === '') {
851903
// Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE
852904
errTip = err.message || '未知网络错误。';
905+
if (!unknow_error_retry(file)) {
906+
return;
907+
}
853908
break;
854909
}
855910
var errorObj = that.parseJSON(err.response);
@@ -869,6 +924,9 @@ function QiniuJsSDK() {
869924
break;
870925
case 599:
871926
errTip = "网络连接异常。请重试或提交反馈。";
927+
if (!unknow_error_retry(file)) {
928+
return;
929+
}
872930
break;
873931
case 614:
874932
errTip = "文件已存在。";
@@ -887,6 +945,9 @@ function QiniuJsSDK() {
887945
break;
888946
default:
889947
errTip = "未知错误。";
948+
if (!unknow_error_retry(file)) {
949+
return;
950+
}
890951
break;
891952
}
892953
errTip = errTip + '(' + err.status + ':' + errorText + ')';
@@ -906,6 +967,9 @@ function QiniuJsSDK() {
906967
break;
907968
default:
908969
errTip = err.message + err.details;
970+
if (!unknow_error_retry(file)) {
971+
return;
972+
}
909973
break;
910974
}
911975
if (_Error_Handler) {

0 commit comments

Comments
 (0)