From 1388575df02cd2d58bc37364d9c4daa454ba7182 Mon Sep 17 00:00:00 2001 From: SunLn Date: Mon, 5 May 2014 15:53:16 +0800 Subject: [PATCH 01/19] try to support private bucket --- demo/js/main.js | 5 +++-- demo/js/qiniu.js | 10 ++++++++++ demo/server.js | 41 +++++++++++++++++++++++++++++++++++------ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/demo/js/main.js b/demo/js/main.js index 4597dcec..7aadd962 100644 --- a/demo/js/main.js +++ b/demo/js/main.js @@ -12,8 +12,9 @@ var uploader = Qiniu.uploader({ flash_swf_url: 'js/plupload/Moxie.swf', dragdrop: true, chunk_size: '4mb', - uptoken_url: '/token', - domain: 'http://qiniu-plupload.qiniudn.com/', + uptoken_url: '/uptoken', + downtoken_url: '/downtoken', + domain: 'http://b-pri-unpro.qiniudn.com/', // unique_names: true, // save_key: true, // x_vars: { diff --git a/demo/js/qiniu.js b/demo/js/qiniu.js index 6eabeaa9..062ce0e8 100644 --- a/demo/js/qiniu.js +++ b/demo/js/qiniu.js @@ -540,6 +540,16 @@ function QiniuJsSDK() { } }; } else { + if (op.downtoken_url) { + var ajax = that.createAjax(); + ajax.open('POST', op.downtoken_url, true); + console.log(op.downtoken_url, info.response); + // ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); + // ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + var key = that.parseJSON(info.response).key; + ajax.send('key=' + key + '&domain=' + op.domain); + } if (FileUploaded_Handler) { FileUploaded_Handler(up, file, info.response); } diff --git a/demo/server.js b/demo/server.js index 0c57c2a8..30c2e812 100644 --- a/demo/server.js +++ b/demo/server.js @@ -7,12 +7,10 @@ app.configure(function() { app.use(express.static(__dirname + '/')); }); -app.use(function(req, res, next) { - req.headers['if-none-match'] = 'no-match-for-this'; - next(); -}); -app.get('/token', function(req, res, next) { +app.use(express.urlencoded()); + +app.get('/uptoken', function(req, res, next) { var token = uptoken.token(); res.header("Cache-Control", "max-age=0, private, must-revalidate"); res.header("Pragma", "no-cache"); @@ -24,6 +22,35 @@ app.get('/token', function(req, res, next) { } }); +function downloadUrl(domain, key, mac) { + var baseUrl = qiniu.rs.makeBaseUrl(domain, key); + console.log(baseUrl) + var policy = new qiniu.rs.GetPolicy(); + return policy.makeRequest(baseUrl, mac); +} + +app.post('/downtoken', function(req, res) { + // console.log(req.query) + // console.log(req) + res.header("Cache-Control", "max-age=0, private, must-revalidate"); + res.header("Pragma", "no-cache"); + res.header("Expires", 0); + console.log(req.body); + var key = req.body.key, + domain = req.body.domain; + console.log('key>>>>>>', key) + console.log('key>>>>>>', domain) + var mac = { + 'secretKey': config.SECRET_KEY + } + var token = downloadUrl(domain, key, mac); + if (token) { + res.json({ + downtoken: token + }) + } +}); + app.get('/', function(req, res) { res.setHeader('Pragma', 'no-cache'); res.sendfile(__dirname + '/index.html') @@ -35,4 +62,6 @@ qiniu.conf.SECRET_KEY = config.SECRET_KEY; var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name); -app.listen(config.Port); +app.listen(config.Port, function() { + console.log('Listening on port %d', config.Port); +}); From f15c697ad2cc7e7bf5222b22ba1edf5d3c2166f2 Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 14:28:23 +0800 Subject: [PATCH 02/19] ajax send --- demo/js/qiniu.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/demo/js/qiniu.js b/demo/js/qiniu.js index 062ce0e8..6eabeaa9 100644 --- a/demo/js/qiniu.js +++ b/demo/js/qiniu.js @@ -540,16 +540,6 @@ function QiniuJsSDK() { } }; } else { - if (op.downtoken_url) { - var ajax = that.createAjax(); - ajax.open('POST', op.downtoken_url, true); - console.log(op.downtoken_url, info.response); - // ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); - // ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); - ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - var key = that.parseJSON(info.response).key; - ajax.send('key=' + key + '&domain=' + op.domain); - } if (FileUploaded_Handler) { FileUploaded_Handler(up, file, info.response); } From 27263176c7d6df3bc3f84cc8b64812c31908cfe8 Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 16:26:05 +0800 Subject: [PATCH 03/19] make file update --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index b0350f15..3358325c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ install : all all : + grunt node demo/server.js From 88a0bb0dbf5e7c89eafd6a9bce4c2edfcff40cb1 Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 16:26:26 +0800 Subject: [PATCH 04/19] update server.js --- demo/server.js | 57 ++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/demo/server.js b/demo/server.js index 2b2098dc..b3a9194f 100644 --- a/demo/server.js +++ b/demo/server.js @@ -11,13 +11,6 @@ app.configure(function() { app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); - -app.use(function(req, res, next) { - req.headers['if-none-match'] = 'no-match-for-this'; - next(); -}); - - app.use(express.urlencoded()); app.get('/uptoken', function(req, res, next) { @@ -32,31 +25,41 @@ app.get('/uptoken', function(req, res, next) { } }); -function downloadUrl(domain, key, mac) { - var baseUrl = qiniu.rs.makeBaseUrl(domain, key); - console.log(baseUrl) - var policy = new qiniu.rs.GetPolicy(); - return policy.makeRequest(baseUrl, mac); -} - app.post('/downtoken', function(req, res) { - // console.log(req.query) - // console.log(req) - res.header("Cache-Control", "max-age=0, private, must-revalidate"); - res.header("Pragma", "no-cache"); - res.header("Expires", 0); - console.log(req.body); + var key = req.body.key, domain = req.body.domain; - console.log('key>>>>>>', key) - console.log('key>>>>>>', domain) - var mac = { - 'secretKey': config.SECRET_KEY + + //trim 'http://' + if (domain.indexOf('http://') != -1) { + domain = domain.substr(7); } - var token = downloadUrl(domain, key, mac); - if (token) { + //trim 'https://' + if (domain.indexOf('https://') != -1) { + domain = domain.substr(8); + } + //trim '/' if the domain's last char is '/' + if (domain.lastIndexOf('/') === domain.length - 1) { + domain = domain.substr(0, domain.length - 1); + } + + var baseUrl = qiniu.rs.makeBaseUrl(domain, key); + var deadline = 3600 + Math.floor(Date.now() / 1000); + + if (baseUrl.indexOf('?') >= 0) { + baseUrl += '&e='; + } else { + baseUrl += '?e='; + } + baseUrl += deadline; + var signature = qiniu.util.hmacSha1(baseUrl, config.SECRET_KEY); + var encodedSign = qiniu.util.base64ToUrlSafe(signature); + var downloadToken = config.ACCESS_KEY + ':' + encodedSign; + + if (downloadToken) { res.json({ - downtoken: token + downtoken: downloadToken, + url: baseUrl + '&token=' + downloadToken }) } }); From 8a0a540994d1486f6218f8330b0c5ab692bf9924 Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 17:30:39 +0800 Subject: [PATCH 05/19] get_downtoken --- src/qiniu.js | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 0051c191..b8f02235 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -493,6 +493,41 @@ function QiniuJsSDK() { uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { + + var get_downtoken = function(info) { + var ajax_downtoken = that.createAjax(); + ajax_downtoken.open('POST', op.downtoken_url, true); + ajax_downtoken.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + ajax_downtoken.onreadystatechange = function() { + if (ajax_downtoken.readyState === 4) { + if (ajax_downtoken.status === 200) { + var res_downtoken; + try { + res_downtoken = that.parseJSON(ajax_downtoken.responseText); + } catch (e) { + throw ('invalid json format'); + } + var info_extended = {}; + plupload.extend(info_extended, res_downtoken, { + key: that.parseJSON(info).key, + hash: that.parseJSON(info).hash + }); + if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, JSON.stringify(info_extended)); + } + } else { + uploader.trigger('Error', { + status: ajax_downtoken.status, + response: ajax_downtoken.responseText, + file: file, + code: -200 + }); + } + } + }; + ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain); + }; + var res = that.parseJSON(info.response); ctx = ctx ? ctx : res.ctx; if (ctx) { @@ -523,13 +558,13 @@ function QiniuJsSDK() { ajax.open('POST', url, true); ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); - ajax.send(ctx); ajax.onreadystatechange = function() { if (ajax.readyState === 4) { if (ajax.status === 200) { var info = ajax.responseText; - - if (_FileUploaded_Handler) { + if (op.downtoken_url) { + get_downtoken(info); + } else if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, info); } @@ -543,8 +578,11 @@ function QiniuJsSDK() { } } }; + ajax.send(ctx); } else { - if (_FileUploaded_Handler) { + if (op.downtoken_url) { + get_downtoken(info.response); + } else if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, info.response); } } From e6eac23140c7b1c290c684a1ca782880b75e059c Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 18:11:10 +0800 Subject: [PATCH 06/19] main.js --- demo/js/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/demo/js/main.js b/demo/js/main.js index 0fc6690a..3829daf1 100644 --- a/demo/js/main.js +++ b/demo/js/main.js @@ -16,6 +16,7 @@ $(function() { chunk_size: '4mb', uptoken_url: $('#uptoken_url').val(), domain: $('#domain').val(), + downtoken_url: '/downtoken', // unique_names: true, // save_key: true, // x_vars: { From cbfe87bc87a74dda5e5818efec079d3f4e794e3c Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 18:11:26 +0800 Subject: [PATCH 07/19] add imageview --- demo/server.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/demo/server.js b/demo/server.js index b3a9194f..b182d489 100644 --- a/demo/server.js +++ b/demo/server.js @@ -46,12 +46,8 @@ app.post('/downtoken', function(req, res) { var baseUrl = qiniu.rs.makeBaseUrl(domain, key); var deadline = 3600 + Math.floor(Date.now() / 1000); - if (baseUrl.indexOf('?') >= 0) { - baseUrl += '&e='; - } else { - baseUrl += '?e='; - } - baseUrl += deadline; + baseUrl += '?imageView/2/w/200/h/200'; + baseUrl += '&e=' + deadline; var signature = qiniu.util.hmacSha1(baseUrl, config.SECRET_KEY); var encodedSign = qiniu.util.base64ToUrlSafe(signature); var downloadToken = config.ACCESS_KEY + ':' + encodedSign; From 28e6a6c56a09a31640520610d48789b7aa6450aa Mon Sep 17 00:00:00 2001 From: SunLn Date: Tue, 6 May 2014 18:11:43 +0800 Subject: [PATCH 08/19] update ui.js --- demo/js/ui.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/demo/js/ui.js b/demo/js/ui.js index dbc91990..1cb492cf 100644 --- a/demo/js/ui.js +++ b/demo/js/ui.js @@ -190,11 +190,18 @@ FileProgress.prototype.setComplete = function(up, info) { var td = this.fileProgressWrapper.find('td:eq(2) .progress'); var res = $.parseJSON(info); - var domain = up.getOption('domain'); - var url = domain + encodeURI(res.key); - var link = domain + res.key; - var str = "" + - "
Hash:" + res.hash + "
"; + var url; + if (res.url) { + url = res.url; + str = "" + + "
Hash:" + res.hash + "
"; + } else { + var domain = up.getOption('domain'); + url = domain + encodeURI(res.key); + var link = domain + res.key; + str = "" + + "
Hash:" + res.hash + "
"; + } td.html(str).removeClass().next().next('.status').hide(); @@ -240,12 +247,14 @@ FileProgress.prototype.setComplete = function(up, info) { Wrapper.append(imgWrapper); var img = new Image(); - $(img).attr('src', url + imageView); + if (!'/imageView/'.test(url)) { + url += imageView + } //todo + $(img).attr('src', url); var height_space = 340; $(img).on('load', function() { - - showImg.attr('src', url + imageView); + showImg.attr('src', url); linkWrapper.attr('href', url).attr('title', '查看原图'); From facbb587298a4dcb4eceeb4c520eb49040f7fb18 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 11:13:57 +0800 Subject: [PATCH 09/19] rename/update func --- src/qiniu.js | 76 +++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index b8f02235..3c126e32 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -494,38 +494,42 @@ function QiniuJsSDK() { uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { - var get_downtoken = function(info) { - var ajax_downtoken = that.createAjax(); - ajax_downtoken.open('POST', op.downtoken_url, true); - ajax_downtoken.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - ajax_downtoken.onreadystatechange = function() { - if (ajax_downtoken.readyState === 4) { - if (ajax_downtoken.status === 200) { - var res_downtoken; - try { - res_downtoken = that.parseJSON(ajax_downtoken.responseText); - } catch (e) { - throw ('invalid json format'); - } - var info_extended = {}; - plupload.extend(info_extended, res_downtoken, { - key: that.parseJSON(info).key, - hash: that.parseJSON(info).hash - }); - if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, JSON.stringify(info_extended)); + var last_step = function(up, file, info) { + if (op.downtoken_url) { + var ajax_downtoken = that.createAjax(); + ajax_downtoken.open('POST', op.downtoken_url, true); + ajax_downtoken.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + ajax_downtoken.onreadystatechange = function() { + if (ajax_downtoken.readyState === 4) { + if (ajax_downtoken.status === 200) { + var res_downtoken; + try { + res_downtoken = that.parseJSON(ajax_downtoken.responseText); + } catch (e) { + throw ('invalid json format'); + } + var info_extended = {}; + plupload.extend(info_extended, res_downtoken, { + key: that.parseJSON(info).key, + hash: that.parseJSON(info).hash + }); + if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, JSON.stringify(info_extended)); + } + } else { + uploader.trigger('Error', { + status: ajax_downtoken.status, + response: ajax_downtoken.responseText, + file: file, + code: -200 + }); } - } else { - uploader.trigger('Error', { - status: ajax_downtoken.status, - response: ajax_downtoken.responseText, - file: file, - code: -200 - }); } - } - }; - ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain); + }; + ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain); + } else if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, info); + } }; var res = that.parseJSON(info.response); @@ -562,11 +566,7 @@ function QiniuJsSDK() { if (ajax.readyState === 4) { if (ajax.status === 200) { var info = ajax.responseText; - if (op.downtoken_url) { - get_downtoken(info); - } else if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, info); - } + last_step(up, file, info); } else { uploader.trigger('Error', { @@ -580,11 +580,7 @@ function QiniuJsSDK() { }; ajax.send(ctx); } else { - if (op.downtoken_url) { - get_downtoken(info.response); - } else if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, info.response); - } + last_step(up, file, info.response); } }; From 43fef34224c362a77d4081552fe5eb005b9910ad Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 11:37:42 +0800 Subject: [PATCH 10/19] remove imageview in baseUrl --- demo/server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/demo/server.js b/demo/server.js index b182d489..49a899b9 100644 --- a/demo/server.js +++ b/demo/server.js @@ -46,8 +46,7 @@ app.post('/downtoken', function(req, res) { var baseUrl = qiniu.rs.makeBaseUrl(domain, key); var deadline = 3600 + Math.floor(Date.now() / 1000); - baseUrl += '?imageView/2/w/200/h/200'; - baseUrl += '&e=' + deadline; + baseUrl += '?e=' + deadline; var signature = qiniu.util.hmacSha1(baseUrl, config.SECRET_KEY); var encodedSign = qiniu.util.base64ToUrlSafe(signature); var downloadToken = config.ACCESS_KEY + ':' + encodedSign; From c75b2ddc3747ef25a8b674a9f2fbee72b259c17c Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 11:38:59 +0800 Subject: [PATCH 11/19] config update --- demo/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/config.js b/demo/config.js index d5baae05..3ce09cab 100644 --- a/demo/config.js +++ b/demo/config.js @@ -3,6 +3,6 @@ module.exports = { 'SECRET_KEY': '', 'Bucket_Name': '', 'Port': 18080, - 'Uptoken_Url': '/token', + 'Uptoken_Url': '/uptoken', 'Domain': 'http://qiniu-plupload.qiniudn.com/' -} +}; From 1641d1f5fcad3fa5c0caf97071cd21ee8dda911c Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 11:39:18 +0800 Subject: [PATCH 12/19] throw error if json format error --- src/qiniu.js | 2 +- src/qiniu.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 3c126e32..bbbe399d 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -451,7 +451,7 @@ function QiniuJsSDK() { errorObj = that.parseJSON(errorObj.error); errorText = errorObj.error || 'file exists'; } catch (e) { - // console.log(e); + throw ('invalid json format'); } break; case 631: diff --git a/src/qiniu.min.js b/src/qiniu.min.js index e1fd539a..a29aa94c 100644 --- a/src/qiniu.min.js +++ b/src/qiniu.min.js @@ -1 +1 @@ -function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=a.parseJSON(g.response);if(f=f?f:h.ctx){var k="";b.save_key||(k=i(d,e,a.key_handler),k=k?"/key/"+a.URLSafeBase64Encode(k):"");var l=b.x_vars,m="",n="";if(void 0!==l&&"object"==typeof l)for(var o in l)l.hasOwnProperty(o)&&("function"==typeof l[o]?m=a.URLSafeBase64Encode(l[o](d,e)):"object"!=typeof l[o]&&(m=a.URLSafeBase64Encode(l[o])),n+="/x:"+o+"/"+m);var p="http://up.qiniu.com/mkfile/"+e.size+k+n,q=a.createAjax();q.open("POST",p,!0),q.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),q.setRequestHeader("Authorization","UpToken "+a.token),q.send(f),q.onreadystatechange=function(){if(4===q.readyState)if(200===q.status){var a=q.responseText;c&&c(d,e,a)}else j.trigger("Error",{status:q.status,response:q.responseText,file:e,code:-200})}}else c&&c(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file +function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){throw"invalid json format"}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=function(d,e,f){if(b.downtoken_url){var g=a.createAjax();g.open("POST",b.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var b;try{b=a.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,b,{key:a.parseJSON(f).key,hash:a.parseJSON(f).hash}),c&&c(d,e,JSON.stringify(i))}else j.trigger("Error",{status:g.status,response:g.responseText,file:e,code:-200})},g.send("key="+a.parseJSON(f).key+"&domain="+b.domain)}else c&&c(d,e,f)},k=a.parseJSON(g.response);if(f=f?f:k.ctx){var l="";b.save_key||(l=i(d,e,a.key_handler),l=l?"/key/"+a.URLSafeBase64Encode(l):"");var m=b.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=a.URLSafeBase64Encode(m[p](d,e)):"object"!=typeof m[p]&&(n=a.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q="http://up.qiniu.com/mkfile/"+e.size+l+o,r=a.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+a.token),r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var a=r.responseText;h(d,e,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:e,code:-200})},r.send(f)}else h(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file From a5f338b6e0a8e96c10b34ef844888400c5036fe1 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 11:40:53 +0800 Subject: [PATCH 13/19] add comment --- demo/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/js/main.js b/demo/js/main.js index 3829daf1..67289d40 100644 --- a/demo/js/main.js +++ b/demo/js/main.js @@ -16,7 +16,7 @@ $(function() { chunk_size: '4mb', uptoken_url: $('#uptoken_url').val(), domain: $('#domain').val(), - downtoken_url: '/downtoken', + // downtoken_url: '/downtoken', // unique_names: true, // save_key: true, // x_vars: { From ff8416bbd8555aa06ae4d43e75f9e05df7565646 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 12:01:08 +0800 Subject: [PATCH 14/19] fix bug --- demo/js/ui.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/js/ui.js b/demo/js/ui.js index 1cb492cf..e289dddf 100644 --- a/demo/js/ui.js +++ b/demo/js/ui.js @@ -247,9 +247,9 @@ FileProgress.prototype.setComplete = function(up, info) { Wrapper.append(imgWrapper); var img = new Image(); - if (!'/imageView/'.test(url)) { + if (!/imageView/.test(url)) { url += imageView - } //todo + } $(img).attr('src', url); var height_space = 340; From cedf2a55a2490ef756765a5f9de7d7966016a1ac Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 14:21:47 +0800 Subject: [PATCH 15/19] readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2bd88d6a..b3486dd3 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,9 @@ qiniu-js-sdk var uploader = Qiniu.uploader({ runtimes: 'html5,flash,html4', //上传模式,依次退化 browse_button: 'pickfiles', //上传选择的点选按钮,**必需** - uptoken_url: '/token', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) + uptoken_url: '/uptoken', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) + // downtoken_url: '/downtoken', + // Ajax请求downToken的Url,私有空间时使用,JS-SDK将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址 // uptoken : '', //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成 // unique_names: true, // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名) // save_key: true, // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 From 1f3515c4ba93e6a7eadc430cafc584e591bfbdf3 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 14:36:29 +0800 Subject: [PATCH 16/19] fix x:val bug --- src/qiniu.js | 5 +---- src/qiniu.min.js | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index bbbe399d..0014bb38 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -509,10 +509,7 @@ function QiniuJsSDK() { throw ('invalid json format'); } var info_extended = {}; - plupload.extend(info_extended, res_downtoken, { - key: that.parseJSON(info).key, - hash: that.parseJSON(info).hash - }); + plupload.extend(info_extended, that.parseJSON(info), res_downtoken); if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, JSON.stringify(info_extended)); } diff --git a/src/qiniu.min.js b/src/qiniu.min.js index a29aa94c..58fbc3ad 100644 --- a/src/qiniu.min.js +++ b/src/qiniu.min.js @@ -1 +1 @@ -function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){throw"invalid json format"}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=function(d,e,f){if(b.downtoken_url){var g=a.createAjax();g.open("POST",b.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var b;try{b=a.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,b,{key:a.parseJSON(f).key,hash:a.parseJSON(f).hash}),c&&c(d,e,JSON.stringify(i))}else j.trigger("Error",{status:g.status,response:g.responseText,file:e,code:-200})},g.send("key="+a.parseJSON(f).key+"&domain="+b.domain)}else c&&c(d,e,f)},k=a.parseJSON(g.response);if(f=f?f:k.ctx){var l="";b.save_key||(l=i(d,e,a.key_handler),l=l?"/key/"+a.URLSafeBase64Encode(l):"");var m=b.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=a.URLSafeBase64Encode(m[p](d,e)):"object"!=typeof m[p]&&(n=a.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q="http://up.qiniu.com/mkfile/"+e.size+l+o,r=a.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+a.token),r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var a=r.responseText;h(d,e,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:e,code:-200})},r.send(f)}else h(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file +function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){throw"invalid json format"}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=function(d,e,f){if(b.downtoken_url){var g=a.createAjax();g.open("POST",b.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var b;try{b=a.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,a.parseJSON(f),b),c&&c(d,e,JSON.stringify(i))}else j.trigger("Error",{status:g.status,response:g.responseText,file:e,code:-200})},g.send("key="+a.parseJSON(f).key+"&domain="+b.domain)}else c&&c(d,e,f)},k=a.parseJSON(g.response);if(f=f?f:k.ctx){var l="";b.save_key||(l=i(d,e,a.key_handler),l=l?"/key/"+a.URLSafeBase64Encode(l):"");var m=b.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=a.URLSafeBase64Encode(m[p](d,e)):"object"!=typeof m[p]&&(n=a.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q="http://up.qiniu.com/mkfile/"+e.size+l+o,r=a.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+a.token),r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var a=r.responseText;h(d,e,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:e,code:-200})},r.send(f)}else h(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file From ddfa1c484bc740566d76cf38a998b8207121b418 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 14:42:46 +0800 Subject: [PATCH 17/19] update readme --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3486dd3..13928cc9 100644 --- a/README.md +++ b/README.md @@ -303,6 +303,8 @@ qiniu-js-sdk * 安装 [Nodejs](http://nodejs.org/download/)、[npm](https://www.npmjs.org/) +* `npm install -g grunt-cli`,安装 Grunt + * `npm install`,安装七牛 Node.js SDK、Express * 获取源代码: @@ -318,12 +320,15 @@ qiniu-js-sdk 'ACCESS_KEY': '', 'SECRET_KEY': '', 'Bucket_Name': '', - 'Port': 18080 + 'Port': 18080, + 'Uptoken_Url': '', + 'Domain': '' } ``` -* 在`demo`目录运行`node server.js` 或者 在根目录运行`make`启动 +* 在根目录运行`make`启动 + * 访问`http://127.0.0.1:18080/`或`http://localhost:18080/` ## 说明 From 999abf07fcbd13c45f3756e3f09cdd8cf2a40980 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 14:53:56 +0800 Subject: [PATCH 18/19] -200 -> plupload.HTTP_ERROR --- src/qiniu.js | 2 +- src/qiniu.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 0014bb38..d79ac217 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -518,7 +518,7 @@ function QiniuJsSDK() { status: ajax_downtoken.status, response: ajax_downtoken.responseText, file: file, - code: -200 + code: plupload.HTTP_ERROR }); } } diff --git a/src/qiniu.min.js b/src/qiniu.min.js index 58fbc3ad..5e66dfab 100644 --- a/src/qiniu.min.js +++ b/src/qiniu.min.js @@ -1 +1 @@ -function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){throw"invalid json format"}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=function(d,e,f){if(b.downtoken_url){var g=a.createAjax();g.open("POST",b.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var b;try{b=a.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,a.parseJSON(f),b),c&&c(d,e,JSON.stringify(i))}else j.trigger("Error",{status:g.status,response:g.responseText,file:e,code:-200})},g.send("key="+a.parseJSON(f).key+"&domain="+b.domain)}else c&&c(d,e,f)},k=a.parseJSON(g.response);if(f=f?f:k.ctx){var l="";b.save_key||(l=i(d,e,a.key_handler),l=l?"/key/"+a.URLSafeBase64Encode(l):"");var m=b.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=a.URLSafeBase64Encode(m[p](d,e)):"object"!=typeof m[p]&&(n=a.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q="http://up.qiniu.com/mkfile/"+e.size+l+o,r=a.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+a.token),r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var a=r.responseText;h(d,e,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:e,code:-200})},r.send(f)}else h(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file +function QiniuJsSDK(){this.detectIEVersion=function(){for(var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="",c[0];)a++;return a>4?a:!1},this.isImage=function(a){var b,c="",d=["png","jpg","jpeg","gif","bmp"],e=/\.([a-zA-Z0-9]+)(\?|\@|$)/;if(!a||!e.test(a))return!1;b=e.exec(a),c=b[1].toLowerCase();for(var f=0,g=d.length;g>f;f++)if(c===d[f])return!0;return!1},this.getFileExtension=function(a){var b,c=a.split(".");return b=1===c.length||""===c[0]&&2===c.length?"":c.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b,c,d=a+"",e="",f=0;b=c=0,f=d.length;for(var g=0;f>g;g++){var h=d.charCodeAt(g),i=null;if(128>h)c++;else if(h>127&&2048>h)i=String.fromCharCode(h>>6|192,63&h|128);else if(63488&h^!0)i=String.fromCharCode(h>>12|224,h>>6&63|128,63&h|128);else{if(64512&h^!0)throw new RangeError("Unmatched trail surrogate at "+g);var j=d.charCodeAt(++g);if(64512&j^!0)throw new RangeError("Unmatched lead surrogate at "+(g-1));h=((1023&h)<<10)+(1023&j)+65536,i=String.fromCharCode(h>>18|240,h>>12&63|128,h>>6&63|128,63&h|128)}null!==i&&(c>b&&(e+=d.slice(b,c)),e+=i,b=c=g+1)}return c>b&&(e+=d.slice(b,f)),e},this.base64_encode=function(a){var b,c,d,e,f,g,h,i,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do b=a.charCodeAt(k++),c=a.charCodeAt(k++),d=a.charCodeAt(k++),i=b<<16|c<<8|d,e=i>>18&63,f=i>>12&63,g=i>>6&63,h=63&i,n[l++]=j.charAt(e)+j.charAt(f)+j.charAt(g)+j.charAt(h);while(k=f&&b.chunk_size&&b.runtimes.indexOf("flash")>=0?b.chunk_size=0:(c=20,d=4<d&&(b.chunk_size=d))};g();var h=function(){if(b.uptoken)a.token=b.uptoken;else{var c=a.createAjax();c.open("GET",a.uptoken_url,!0),c.setRequestHeader("If-Modified-Since","0"),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status){var b=a.parseJSON(c.responseText);a.token=b.uptoken}},c.send()}},i=function(c,d,e){var f="",g=!1;if(!b.save_key)if(g=c.getOption&&c.getOption("unique_names"),g=g||c.settings&&c.settings.unique_names){var h=a.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(c,d):d.name;return f};plupload.extend(c,b,{url:"http://up.qiniu.com",multipart_params:{token:""}});var j=new plupload.Uploader(c);return j.bind("Init",function(){h()}),j.init(),j.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&$.each(b,function(){a.start()}),a.refresh()}),j.bind("BeforeUpload",function(c,d){f="";var e=function(c,d,e){var f;f=b.save_key?{token:a.token}:{key:i(c,d,e),token:a.token};var g=b.x_vars;if(void 0!==g&&"object"==typeof g)for(var h in g)g.hasOwnProperty(h)&&("function"==typeof g[h]?f["x:"+h]=g[h](c,d):"object"!=typeof g[h]&&(f["x:"+h]=g[h]));c.setOption({url:"http://up.qiniu.com/",multipart:!0,chunk_size:void 0,multipart_params:f})},g=c.getOption&&c.getOption("chunk_size");if(g=g||c.settings&&c.settings.chunk_size,"html5"===j.runtime&&g)if(d.sizeg&&b.setOption({url:"http://up.qiniu.com/mkblk/"+g})}),j.bind("Error",function(b){return function(c,d){var e="",f=d.file;if(f){switch(d.code){case plupload.FAILED:e="上传失败。请稍后再试。";break;case plupload.FILE_SIZE_ERROR:var g=c.getOption&&c.getOption("max_file_size");g=g||c.settings&&c.settings.max_file_size,e="浏览器最大可上传"+g+"。更大文件请使用命令行工具。";break;case plupload.FILE_EXTENSION_ERROR:e="文件验证失败。请稍后重试。";break;case plupload.HTTP_ERROR:var h=a.parseJSON(d.response),i=h.error;switch(d.status){case 400:e="请求报文格式错误。";break;case 401:e="客户端认证授权失败。请重试或提交反馈。";break;case 405:e="客户端请求错误。请重试或提交反馈。";break;case 579:e="资源上传成功,但回调失败。";break;case 599:e="网络连接异常。请重试或提交反馈。";break;case 614:e="文件已存在。";try{h=a.parseJSON(h.error),i=h.error||"file exists"}catch(k){throw"invalid json format"}break;case 631:e="指定空间不存在。";break;case 701:e="上传数据块校验出错。请重试或提交反馈。";break;default:e="未知错误。"}e=e+"("+d.status+":"+i+")";break;case plupload.SECURITY_ERROR:e="安全配置错误。请联系网站管理员。";break;case plupload.GENERIC_ERROR:e="上传失败。请稍后再试。";break;case plupload.IO_ERROR:e="上传失败。请稍后再试。";break;case plupload.INIT_ERROR:e="网站配置错误。请联系网站管理员。",j.destroy();break;default:e=d.message+d.details}b&&b(c,d,e)}c.refresh()}}(d)),j.bind("FileUploaded",function(c){return function(d,e,g){var h=function(d,e,f){if(b.downtoken_url){var g=a.createAjax();g.open("POST",b.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var b;try{b=a.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,a.parseJSON(f),b),c&&c(d,e,JSON.stringify(i))}else j.trigger("Error",{status:g.status,response:g.responseText,file:e,code:plupload.HTTP_ERROR})},g.send("key="+a.parseJSON(f).key+"&domain="+b.domain)}else c&&c(d,e,f)},k=a.parseJSON(g.response);if(f=f?f:k.ctx){var l="";b.save_key||(l=i(d,e,a.key_handler),l=l?"/key/"+a.URLSafeBase64Encode(l):"");var m=b.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=a.URLSafeBase64Encode(m[p](d,e)):"object"!=typeof m[p]&&(n=a.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q="http://up.qiniu.com/mkfile/"+e.size+l+o,r=a.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+a.token),r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var a=r.responseText;h(d,e,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:e,code:-200})},r.send(f)}else h(d,e,g.response)}}(e)),j},this.getUrl=function(a){if(!a)return!1;a=encodeURI(a);var b=this.domain;return"/"!==b.slice(b.length-1)&&(b+="/"),b+a},this.imageView2=function(a,b){var c=a.mode||"",d=a.w||"",e=a.h||"",f=a.quality||"",g=a.format||"";if(!c)return!1;if(!d&&!e)return!1;var h="imageView2/"+c;return h+=d?"/w/"+d:"",h+=e?"/h/"+e:"",h+=f?"/q/"+f:"",h+=g?"/format/"+g:"",b&&(h=this.getUrl(b)+"?"+h),h},this.imageMogr2=function(a,b){var c=a["auto-orient"]||"",d=a.thumbnail||"",e=a.strip||"",f=a.gravity||"",g=a.crop||"",h=a.quality||"",i=a.rotate||"",j=a.format||"",k=a.blur||"",l="imageMogr2";return l+=c?"/auto-orient":"",l+=d?"/thumbnail/"+d:"",l+=e?"/strip":"",l+=f?"/gravity/"+f:"",l+=h?"/quality/"+h:"",l+=g?"/crop/"+g:"",l+=i?"/rotate/"+i:"",l+=j?"/format/"+j:"",l+=k?"/blur/"+k:"",b&&(l=this.getUrl(b)+"?"+l),l},this.watermark=function(a,b){var c=a.mode;if(!c)return!1;var d="watermark/"+c;if(1===c){var e=a.image||"";if(!e)return!1;d+=e?"/image/"+this.URLSafeBase64Encode(e):""}else{if(2!==c)return!1;var f=a.text?a.text:"",g=a.font?a.font:"",h=a.fontsize?a.fontsize:"",i=a.fill?a.fill:"";if(!f)return!1;d+=f?"/text/"+this.URLSafeBase64Encode(f):"",d+=g?"/font/"+this.URLSafeBase64Encode(g):"",d+=h?"/fontsize/"+h:"",d+=i?"/fill/"+this.URLSafeBase64Encode(i):""}var j=a.dissolve||"",k=a.gravity||"",l=a.dx||"",m=a.dy||"";return d+=j?"/dissolve/"+j:"",d+=k?"/gravity/"+k:"",d+=l?"/dx/"+l:"",d+=m?"/dy/"+m:"",b&&(d=this.getUrl(b)+"?"+d),d},this.imageInfo=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?imageInfo",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.exif=function(a){if(!a)return!1;var b,c=this.getUrl(a)+"?exif",d=this.createAjax(),e=this;return d.open("GET",c,!1),d.onreadystatechange=function(){4===d.readyState&&200===d.status&&(b=e.parseJSON(d.responseText))},d.send(),b},this.get=function(a,b){return b&&a?"exif"===a?this.exif(b):"imageInfo"===a?this.imageInfo(b):!1:!1},this.pipeline=function(a,b){var c,d,e="[object Array]"===Object.prototype.toString.call(a),f="";if(e){for(var g=0,h=a.length;h>g;g++){if(c=a[g],!c.fop)return!1;switch(c.fop){case"watermark":f+=this.watermark(c)+"|";break;case"imageView2":f+=this.imageView2(c)+"|";break;case"imageMogr2":f+=this.imageMogr2(c)+"|";break;default:d=!0}if(d)return!1}if(b){f=this.getUrl(b)+"?"+f;var i=f.length;"|"===f.slice(i-1)&&(f=f.slice(0,i-1))}return f}return!1}}var Qiniu=new QiniuJsSDK; \ No newline at end of file From 05beb4ac2325d3f9b62fe0d4213b388c6e7bda08 Mon Sep 17 00:00:00 2001 From: SunLn Date: Wed, 7 May 2014 15:13:09 +0800 Subject: [PATCH 19/19] change repo link --- demo/views/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/views/index.html b/demo/views/index.html index 5d534128..5c7f6ad6 100644 --- a/demo/views/index.html +++ b/demo/views/index.html @@ -20,7 +20,7 @@

查看初始化代码 - + View Source on Github