diff --git a/.jshintrc b/.jshintrc index 70e6cfcd..284f1302 100644 --- a/.jshintrc +++ b/.jshintrc @@ -38,5 +38,6 @@ "devel": true, // globals that are usually used for logging poor-man's debugging: console, alert, etc. "jquery": true, // jquery library - "node": true + "node": true, + "evil": true } diff --git a/.travis.yml b/.travis.yml index b8292790..f6be0ee3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: node_js node_js: - "0.12" - - "iojs" - - "iojs-v1.0.4" cache: directories: - node_modules diff --git a/bower.json b/bower.json index 89d50f04..b654c40e 100644 --- a/bower.json +++ b/bower.json @@ -14,7 +14,7 @@ "tests" ], "dependencies": { - "plupload": "~2.1.8" + "plupload": "=2.1.1" }, "devDependencies": { "bootstrap": "~3.3.6", diff --git a/demo/config.js.example b/demo/config.js.example index bf93d223..a1ecff80 100644 --- a/demo/config.js.example +++ b/demo/config.js.example @@ -3,6 +3,6 @@ module.exports = { 'SECRET_KEY': '', 'Bucket_Name': '', 'Port': 19110, - 'Uptoken_Url': '/uptoken', + 'Uptoken_Url': 'uptoken', 'Domain': 'http://qiniu-plupload.qiniudn.com/' -}; \ No newline at end of file +}; diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 0ab2efa5..93616584 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -10,8 +10,8 @@ $(function() { browse_button: 'pickfiles', container: 'container', drop_element: 'container', - max_file_size: '100mb', - flash_swf_url: 'js/plupload/Moxie.swf', + max_file_size: '1000mb', + flash_swf_url: 'bower_components/plupload/js/Moxie.swf', dragdrop: true, chunk_size: '4mb', uptoken_url: $('#uptoken_url').val(), @@ -29,6 +29,7 @@ $(function() { // }, // }, auto_start: true, + log_level: 5, init: { 'FilesAdded': function(up, files) { $('table').show(); @@ -217,7 +218,7 @@ $(function() { var newUrl = Qiniu.pipeline(fopArr, key); var newImg = new Image(); - img.attr('src', '/images/loading.gif'); + img.attr('src', 'images/loading.gif'); newImg.onload = function() { img.attr('src', newUrl); img.parent('a').attr('href', newUrl); diff --git a/demo/scripts/multiple.js b/demo/scripts/multiple.js index 3f969486..d2848eea 100644 --- a/demo/scripts/multiple.js +++ b/demo/scripts/multiple.js @@ -255,7 +255,7 @@ $(function() { var newUrl = Qiniu.pipeline(fopArr, key); var newImg = new Image(); - img.attr('src', '/images/loading.gif'); + img.attr('src', 'images/loading.gif'); newImg.onload = function() { img.attr('src', newUrl); img.parent('a').attr('href', newUrl); diff --git a/demo/scripts/ui.js b/demo/scripts/ui.js index 29556c41..202d26ed 100644 --- a/demo/scripts/ui.js +++ b/demo/scripts/ui.js @@ -234,12 +234,12 @@ FileProgress.prototype.setComplete = function(up, info) { var Wrapper = $('
'); var imgWrapper = $('
'); var linkWrapper = $(''); - var showImg = $(''); + var showImg = $(''); progressNameTd.append(Wrapper); if (!isImg) { - showImg.attr('src', '/images/default.png'); + showImg.attr('src', 'images/default.png'); Wrapper.addClass('default'); imgWrapper.append(showImg); @@ -268,7 +268,7 @@ FileProgress.prototype.setComplete = function(up, info) { $('#myModal-img').find('.text-warning').show(); } var newImg = new Image(); - modalBody.find('img').attr('src', '/images/loading.gif'); + modalBody.find('img').attr('src', 'images/loading.gif'); newImg.onload = function() { modalBody.find('img').attr('src', url).data('key', key).data('h', height); modalBody.find('.modal-body-wrapper').find('a').attr('href', url); diff --git a/demo/views/index.html b/demo/views/index.html index b339ef09..bae053e2 100644 --- a/demo/views/index.html +++ b/demo/views/index.html @@ -1,51 +1,51 @@ - - 七牛云存储 - JavaScript SDK - - + + 七牛云存储 - JavaScript SDK + + + - -
-
-

- 七牛云存储 - JavaScript SDK +

-
    -
  • - - JavaScript SDK 基于 Plupload 开发,可以通过 Html5 或 Flash 等模式上传文件至七牛云存储。 - -
  • -
  • - 临时上传的空间不定时清空,请勿保存重要文件。 -
  • +
      +
    • + + JavaScript SDK 基于 Plupload 开发,可以通过 Html5 或 Flash 等模式上传文件至七牛云存储。 + +
    • +
    • + 临时上传的空间不定时清空,请勿保存重要文件。 +
    • Html5模式大于4M文件采用分块上传。
    • 上传图片可查看处理效果。
    • -
    • - 本示例限制最大上传文件100M。 -
    • -
    +
  • + 本示例限制最大上传文件100M。 +
  • +
@@ -235,13 +235,13 @@ - - - - - - - - + + + + + + + + diff --git a/dist/qiniu.js b/dist/qiniu.js index 670baf0b..2d31d988 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2015-12-8 + * Date: 2015-12-9 */ /*global plupload ,mOxie*/ @@ -18,6 +18,8 @@ function QiniuJsSDK() { + var that = this; + var qiniuUploadUrl; if (window.location.protocol === 'https:') { qiniuUploadUrl = 'https://up.qbox.me'; @@ -46,6 +48,53 @@ function QiniuJsSDK() { return v > 4 ? v : false; }; + var logger = { + MUTE: 0, + FATA: 1, + ERROR: 2, + WARN: 3, + INFO: 4, + DEBUG: 5, + TRACE: 6, + level: 0 + }; + + function log(type, args){ + var header = "[qiniu-js-sdk]["+type+"]"; + if (that.detectIEVersion()) { + // http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9 + //var log = Function.prototype.bind.call(console.log, console); + //log.apply(console, args); + var msg = header; + for (var i = 0; i < args.length; i++) { + msg+=that.stringifyJSON(args[i]); + } + console.log(msg); + }else{ + args.unshift(header); + console.log.apply(console, args); + } + } + + function makeLogFunc(code){ + var func = code.toLowerCase(); + logger[func] = function(){ + // logger[func].history = logger[func].history || []; + // logger[func].history.push(arguments); + if(window.console && window.console.log && logger.level>=logger[code]){ + var args = Array.prototype.slice.call(arguments); + log(func,args); + } + }; + } + + for (var property in logger){ + if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) { + makeLogFunc(property); + } + } + + /** * is image * @param {String} url of a file @@ -240,7 +289,7 @@ function QiniuJsSDK() { * craete object used to AJAX * @return {Object} */ - this.createAjax = function() { + this.createAjax = function(argument) { var xmlhttp = {}; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); @@ -262,24 +311,78 @@ function QiniuJsSDK() { return window.JSON.parse(data); } - if (data === null) { - return data; + //var rx_one = /^[\],:{}\s]*$/, + // rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + // rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + // rx_four = /(?:^|:|,)(?:\s*\[)+/g, + var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + + //var json; + + var text = String(data); + rx_dangerous.lastIndex = 0; + if(rx_dangerous.test(text)){ + text = text.replace(rx_dangerous, function(a){ + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); } - if (typeof data === "string") { - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = this.trim(data); + // todo 使用一下判断,增加安全性 + //if ( + // rx_one.test( + // text + // .replace(rx_two, '@') + // .replace(rx_three, ']') + // .replace(rx_four, '') + // ) + //) { + // return eval('(' + text + ')'); + //} - if (data) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, "@").replace(/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { + return eval('('+text+')'); + }; - return (function() { - return data; - })(); + /** + * parse javascript object to json string + * @param {Object} object + * @return {String} json string + */ + this.stringifyJSON = function(obj) { + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.stringify) { + return window.JSON.stringify(obj); + } + switch (typeof (obj)) { + case 'string': + return '"' + obj.replace(/(["\\])/g, '\\$1') + '"'; + case 'array': + return '[' + obj.map(that.stringifyJSON).join(',') + ']'; + case 'object': + if (obj instanceof Array) { + var strArr = []; + var len = obj.length; + for (var i = 0; i < len; i++) { + strArr.push(that.stringifyJSON(obj[i])); + } + return '[' + strArr.join(',') + ']'; + } else if (obj === null) { + return 'null'; + } else { + var string = []; + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + string.push(that.stringifyJSON(property) + ':' + that.stringifyJSON(obj[property])); + } + } + return '{' + string.join(',') + '}'; } - } + break; + case 'number': + return obj; + case false: + return obj; + case 'boolean': + return obj; } }; @@ -292,14 +395,17 @@ function QiniuJsSDK() { return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); }; - var that = this; - /** * create a uploader by QiniuJsSDK * @param {object} options to create a new uploader * @return {object} uploader */ this.uploader = function(op) { + + if (op.log_level) { + logger.level = op.log_level; + } + if (!op.domain) { throw 'domain setting in options is required!'; } @@ -308,6 +414,12 @@ function QiniuJsSDK() { throw 'browse_button setting in options is required!'; } + logger.debug("init uploader start"); + + logger.debug("environment: ", mOxie.Env); + + logger.debug("userAgent: ", navigator.userAgent); + var option = {}; // hold the handler from user passed options @@ -367,6 +479,8 @@ function QiniuJsSDK() { }; reset_chunk_size(); + logger.debug("invoke reset_chunk_size()"); + logger.debug("op.chunk_size: ", op.chunk_size); // if op.uptoken has no value // get token from 'uptoken_url' @@ -418,37 +532,54 @@ function QiniuJsSDK() { } }); + logger.debug("option: ", option); + // create a new uploader with composed options var uploader = new plupload.Uploader(option); + logger.debug("new plupload.Uploader(option)"); + // bind getUpToken to 'Init' event uploader.bind('Init', function(up, params) { + logger.debug("Init event activated"); getUpToken(); }); - // init uploader - uploader.init(); + logger.debug("bind Init event"); // bind 'FilesAdded' event // when file be added and auto_start has set value // uploader will auto start upload the file uploader.bind('FilesAdded', function(up, files) { + logger.debug("FilesAdded event activated"); var auto_start = up.getOption && up.getOption('auto_start'); auto_start = auto_start || (up.settings && up.settings.auto_start); + logger.debug("auto_start: ", auto_start); + logger.debug("files: ", files); if (auto_start) { - plupload.each(files, function(i, file) { + setTimeout(function(){ up.start(); - }); + logger.debug("invoke up.start()"); + }, 0); + // up.start(); + // plupload.each(files, function(i, file) { + // up.start(); + // logger.debug("invoke up.start()") + // logger.debug("file: ", file); + // }); } up.refresh(); // Reposition Flash/Silverlight }); + logger.debug("bind FilesAdded event"); + // bind 'BeforeUpload' event // intercept the process of upload // - prepare uptoken // - according the chunk size to make differnt upload strategy // - resume upload with the last breakpoint of file uploader.bind('BeforeUpload', function(up, file) { + logger.debug("BeforeUpload event activated"); // add a key named speed for file object file.speed = file.speed || 0; ctx = ''; @@ -471,6 +602,8 @@ function QiniuJsSDK() { }; } + logger.debug("directUpload multipart_params_obj: ", multipart_params_obj); + var x_vars = op.x_vars; if (x_vars !== undefined && typeof x_vars === 'object') { for (var x_key in x_vars) { @@ -496,7 +629,7 @@ function QiniuJsSDK() { // detect is weixin or qq inner browser var is_android_weixin_or_qq = function (){ var ua = navigator.userAgent.toLowerCase(); - if((ua.match(/MicroMessenger/i) || mOxie.Env.browser === "QQBrowser") && mOxie.Env.OS.toLowerCase()==="android") { + if((ua.match(/MicroMessenger/i) || mOxie.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && mOxie.Env.OS.toLowerCase()==="android") { return true; } else { return false; @@ -505,9 +638,14 @@ function QiniuJsSDK() { var chunk_size = up.getOption && up.getOption('chunk_size'); chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + + logger.debug("uploader.runtime: ",uploader.runtime); + logger.debug("chunk_size: ",chunk_size); + // TODO: flash support chunk upload - if (uploader.runtime === 'html5' && chunk_size) { + if ((uploader.runtime === 'html5' || uploader.runtime === 'flash') && chunk_size) { if (file.size < chunk_size || is_android_weixin_or_qq()) { + logger.debug("directUpload because file.size < chunk_size || is_android_weixin_or_qq()"); // direct upload if file size is less then the chunk size directUpload(up, file, that.key_handler); } else { @@ -575,14 +713,18 @@ function QiniuJsSDK() { }); } } else { + logger.debug("directUpload because uploader.runtime !== 'html5' || !chunk_size"); // direct upload if runtime is not html5 directUpload(up, file, that.key_handler); } }); + logger.debug("bind BeforeUpload event"); + // bind 'UploadProgress' event // calculate upload speed uploader.bind('UploadProgress', function(up, file) { + logger.trace("UploadProgress event activated"); speedCalInfo.currentTime = new Date().getTime(); var timeUsed = speedCalInfo.currentTime - speedCalInfo.startTime; // ms var fileUploaded = file.loaded || 0; @@ -592,9 +734,12 @@ function QiniuJsSDK() { file.speed = (fileUploaded / timeUsed * 1000).toFixed(0) || 0; // unit: byte/s }); + logger.debug("bind UploadProgress event"); + // bind 'ChunkUploaded' event // store the chunk upload info and set next chunk upload url uploader.bind('ChunkUploaded', function(up, file, info) { + logger.debug("ChunkUploaded event activated"); var res = that.parseJSON(info.response); // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' ctx = ctx ? ctx + ',' + res.ctx : res.ctx; @@ -615,10 +760,14 @@ function QiniuJsSDK() { })); }); + logger.debug("bind ChunkUploaded event"); + // bind 'Error' event // check the err.code and return the errTip uploader.bind('Error', (function(_Error_Handler) { return function(up, err) { + logger.error("Error event activated"); + logger.error("err: ", err); var errTip = ''; var file = err.file; if (file) { @@ -704,12 +853,15 @@ function QiniuJsSDK() { }; })(_Error_Handler)); + logger.debug("bind Error event"); + // bind 'FileUploaded' event // intercept the complete of upload // - get downtoken from downtoken_url if bucket is private // - invoke mkfile api to compose chunks if upload strategy is chunk upload uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { + logger.debug("FileUploaded event activated"); var last_step = function(up, file, info) { if (op.downtoken_url) { @@ -810,6 +962,15 @@ function QiniuJsSDK() { }; })(_FileUploaded_Handler)); + logger.debug("bind FileUploaded event"); + + // init uploader + uploader.init(); + + logger.debug("invoke uploader.init()"); + + logger.debug("init uploader end"); + return uploader; }; diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 4a665755..e9a7c629 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js-sdk v1.0.10-beta | Copyright 2015 by Qiniu */ -!function(a){function b(){var a;a="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com",this.detectIEVersion=function(){var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");while(b.innerHTML="",c[0])a++;return a>4?a:!1},this.isImage=function(a){var b,c="";var d=["png","jpg","jpeg","gif","bmp"];var 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=a.split(".");var c;return c=1===b.length||""===b[0]&&2===b.length?"":b.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b=a+"";var c="",d,e,f=0;d=e=0,f=b.length;for(var g=0;f>g;g++){var h=b.charCodeAt(g);var i=null;if(128>h)e++;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=b.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&&(e>d&&(c+=b.slice(d,e)),c+=i,d=e=g+1)}return e>d&&(c+=b.slice(d,f)),c},this.base64_encode=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=63&j,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k=a&&c.chunk_size&&c.runtimes.indexOf("flash")>=0?c.chunk_size=0:g?c.chunk_size=0:(d=20,e=4<e&&(c.chunk_size=e))};i();var j=function(){if(c.uptoken)b.token=c.uptoken;else{var a=b.createAjax();a.open("GET",b.uptoken_url,!0),a.setRequestHeader("If-Modified-Since","0"),a.onreadystatechange=function(){if(4===a.readyState&&200===a.status){var c=b.parseJSON(a.responseText);b.token=c.uptoken}},a.send()}};var k=function(a,d,e){var f="",g=!1;if(!c.save_key)if(g=a.getOption&&a.getOption("unique_names"),g=g||a.settings&&a.settings.unique_names){var h=b.getFileExtension(d.name);f=h?d.id+"."+h:d.id}else f="function"==typeof e?e(a,d):d.name;return f};plupload.extend(d,c,{url:a,multipart_params:{token:""}});var l=new plupload.Uploader(d);return l.bind("Init",function(a,b){j()}),l.init(),l.bind("FilesAdded",function(a,b){var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,c&&plupload.each(b,function(b,c){a.start()}),a.refresh()}),l.bind("BeforeUpload",function(d,e){e.speed=e.speed||0,g="",c.get_new_uptoken&&j();var f=function(d,e,f){h.startTime=(new Date).getTime();var g;g=c.save_key?{token:b.token}:{key:k(d,e,f),token:b.token};var j=c.x_vars;if(void 0!==j&&"object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&("function"==typeof j[l]?g["x:"+l]=j[l](d,e):"object"!=typeof j[l]&&(g["x:"+l]=j[l]));d.setOption({url:a,multipart:!0,chunk_size:i()?c.max_file_size:void 0,multipart_params:g})};var i=function(){var a=navigator.userAgent.toLowerCase();return!a.match(/MicroMessenger/i)&&"QQBrowser"!==mOxie.Env.browser||"android"!==mOxie.Env.OS.toLowerCase()?!1:!0};var m=d.getOption&&d.getOption("chunk_size");if(m=m||d.settings&&d.settings.chunk_size,"html5"===l.runtime&&m)if(e.sizep-q&&100!==n.percent&&e.size===n.total?(e.percent=n.percent,e.loaded=n.offset,g=n.ctx,h.isResumeUpload=!0,h.resumeFilesize=n.offset,n.offset+o>e.size&&(o=e.size-n.offset)):localStorage.removeItem(e.name)}h.startTime=(new Date).getTime(),d.setOption({url:a+"/mkblk/"+o,multipart:!1,chunk_size:m,required_features:"chunks",headers:{Authorization:"UpToken "+b.token},multipart_params:{}})}else f(d,e,b.key_handler)}),l.bind("UploadProgress",function(a,b){h.currentTime=(new Date).getTime();var c=h.currentTime-h.startTime;var d=b.loaded||0;h.isResumeUpload&&(d=b.loaded-h.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),l.bind("ChunkUploaded",function(c,d,e){var f=b.parseJSON(e.response);g=g?g+","+f.ctx:f.ctx;var h=e.total-e.offset;var i=c.getOption&&c.getOption("chunk_size");i=i||c.settings&&c.settings.chunk_size,i>h&&c.setOption({url:a+"/mkblk/"+h}),localStorage.setItem(d.name,JSON.stringify({ctx:g,percent:d.percent,total:e.total,offset:e.offset,time:(new Date).getTime()}))}),l.bind("Error",function(a){return function(c,d){var e="";var f=d.file;if(f){switch(d.code){case plupload.FAILED:e="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";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="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+g+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:e="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){e=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002";break}var h=b.parseJSON(d.response);var i=h.error;switch(d.status){case 400:e="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:e="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:e="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:e="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:e="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 614:e="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{h=b.parseJSON(h.error),i=h.error||"file exists"}catch(j){i=h.error||"file exists"}break;case 631:e="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:e="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:e="\u672a\u77e5\u9519\u8bef\u3002"}e=e+"("+d.status+"\uff1a"+i+")";break;case plupload.SECURITY_ERROR:e="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:e="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:e="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:e="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",l.destroy();break;default:e=d.message+d.details}a&&a(c,d,e)}c.refresh()}}(e)),l.bind("FileUploaded",function(d){return function(e,f,h){var i=function(a,e,f){if(c.downtoken_url){var g=b.createAjax();g.open("POST",c.downtoken_url,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status){var c;try{c=b.parseJSON(g.responseText)}catch(h){throw"invalid json format"}var i={};plupload.extend(i,b.parseJSON(f),c),d&&d(a,e,JSON.stringify(i))}else l.trigger("Error",{status:g.status,response:g.responseText,file:e,code:plupload.HTTP_ERROR})},g.send("key="+b.parseJSON(f).key+"&domain="+c.domain)}else d&&d(a,e,f)};var j=b.parseJSON(h.response);if(g=g?g:j.ctx){var m="";c.save_key||(m=k(e,f,b.key_handler),m=m?"/key/"+b.URLSafeBase64Encode(m):"");var n="/fname/"+b.URLSafeBase64Encode(f.name);var o=c.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var r in o)o.hasOwnProperty(r)&&("function"==typeof o[r]?p=b.URLSafeBase64Encode(o[r](e,f)):"object"!=typeof o[r]&&(p=b.URLSafeBase64Encode(o[r])),q+="/x:"+r+"/"+p);var s=a+"/mkfile/"+f.size+m+n+q;var t=b.createAjax();t.open("POST",s,!0),t.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),t.setRequestHeader("Authorization","UpToken "+b.token),t.onreadystatechange=function(){if(4===t.readyState)if(localStorage.removeItem(f.name),200===t.status){var a=t.responseText;i(e,f,a)}else l.trigger("Error",{status:t.status,response:t.responseText,file:f,code:-200})},t.send(g)}else i(e,f,h.response)}}(f)),l},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.q||"",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||"";var 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=this.getUrl(a)+"?imageInfo";var c=this.createAjax();var d;var e=this;return c.open("GET",b,!1),c.onreadystatechange=function(){4===c.readyState&&200===c.status&&(d=e.parseJSON(c.responseText))},c.send(),d},this.exif=function(a){if(!a)return!1;var b=this.getUrl(a)+"?exif";var c=this.createAjax();var d;var e=this;return c.open("GET",b,!1),c.onreadystatechange=function(){4===c.readyState&&200===c.status&&(d=e.parseJSON(c.responseText))},c.send(),d},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="[object Array]"===Object.prototype.toString.call(a);var d,e,f="";if(c){for(var g=0,h=a.length;h>g;g++){if(d=a[g],!d.fop)return!1;switch(d.fop){case"watermark":f+=this.watermark(d)+"|";break;case"imageView2":f+=this.imageView2(d)+"|";break;case"imageMogr2":f+=this.imageMogr2(d)+"|";break;default:e=!0}if(e)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 c=new b;a.Qiniu=c,a.QiniuJsSDK=b}(window); +!function(global){function QiniuJsSDK(){var that=this;var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com",this.detectIEVersion=function(){var a=4,b=document.createElement("div"),c=b.getElementsByTagName("i");while(b.innerHTML="",c[0])a++;return a>4?a:!1};var logger={MUTE:0,FATA:1,ERROR:2,WARN:3,INFO:4,DEBUG:5,TRACE:6,level:0};function log(a,b){var c="[qiniu-js-sdk]["+a+"]";if(that.detectIEVersion()){var d=c;for(var e=0;e=logger[a]){var c=Array.prototype.slice.call(arguments);log(b,c)}}}for(var property in logger)logger.hasOwnProperty(property)&&"number"==typeof logger[property]&&!logger.hasOwnProperty(property.toLowerCase())&&makeLogFunc(property);this.isImage=function(a){var b,c="";var d=["png","jpg","jpeg","gif","bmp"];var 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=a.split(".");var c;return c=1===b.length||""===b[0]&&2===b.length?"":b.pop().toLowerCase()},this.utf8_encode=function(a){if(null===a||"undefined"==typeof a)return"";var b=a+"";var c="",d,e,f=0;d=e=0,f=b.length;for(var g=0;f>g;g++){var h=b.charCodeAt(g);var i=null;if(128>h)e++;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=b.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&&(e>d&&(c+=b.slice(d,e)),c+=i,d=e=g+1)}return e>d&&(c+=b.slice(d,f)),c},this.base64_encode=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;a=this.utf8_encode(a+"");do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=63&j,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(kd;d++)b.push(that.stringifyJSON(a[d]));return"["+b.join(",")+"]"}if(null===a)return"null";var e=[];for(var f in a)a.hasOwnProperty(f)&&e.push(that.stringifyJSON(f)+":"+that.stringifyJSON(a[f]));return"{"+e.join(",")+"}";case"number":return a;case!1:return a;case"boolean":return a}},this.trim=function(a){return null===a?"":a.replace(/^\s+|\s+$/g,"")},this.uploader=function(a){if(a.log_level&&(logger.level=a.log_level),!a.domain)throw"domain setting in options is required!";if(!a.browse_button)throw"browse_button setting in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var b={};var c=a.init&&a.init.Error;var d=a.init&&a.init.FileUploaded;a.init.Error=function(){},a.init.FileUploaded=function(){},that.uptoken_url=a.uptoken_url,that.token="",that.key_handler="function"==typeof a.init.Key?a.init.Key:"",this.domain=a.domain;var e="";var f={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};var g=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===mOxie.Env.browser&&mOxie.Env.version<=5&&"Windows"===mOxie.Env.os&&"7"===mOxie.Env.osVersion||"Safari"===mOxie.Env.browser&&"iOS"===mOxie.Env.os&&"7"===mOxie.Env.osVersion;b&&9>=b&&a.chunk_size&&a.runtimes.indexOf("flash")>=0?a.chunk_size=0:f?a.chunk_size=0:(c=20,d=4<d&&(a.chunk_size=d))};g(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var h=function(){if(a.uptoken)that.token=a.uptoken;else{var b=that.createAjax();b.open("GET",that.uptoken_url,!0),b.setRequestHeader("If-Modified-Since","0"),b.onreadystatechange=function(){if(4===b.readyState&&200===b.status){var a=that.parseJSON(b.responseText);that.token=a.uptoken}},b.send()}};var i=function(b,c,d){var e="",f=!1;if(!a.save_key)if(f=b.getOption&&b.getOption("unique_names"),f=f||b.settings&&b.settings.unique_names){var g=that.getFileExtension(c.name);e=g?c.id+"."+g:c.id}else e="function"==typeof d?d(b,c):c.name;return e};plupload.extend(b,a,{url:qiniuUploadUrl,multipart_params:{token:""}}),logger.debug("option: ",b);var j=new plupload.Uploader(b);return logger.debug("new plupload.Uploader(option)"),j.bind("Init",function(a,b){logger.debug("Init event activated"),h()}),logger.debug("bind Init event"),j.bind("FilesAdded",function(a,b){logger.debug("FilesAdded event activated");var c=a.getOption&&a.getOption("auto_start");c=c||a.settings&&a.settings.auto_start,logger.debug("auto_start: ",c),logger.debug("files: ",b),c&&setTimeout(function(){a.start(),logger.debug("invoke up.start()")},0),a.refresh()}),logger.debug("bind FilesAdded event"),j.bind("BeforeUpload",function(b,c){logger.debug("BeforeUpload event activated"),c.speed=c.speed||0,e="",a.get_new_uptoken&&h();var d=function(b,c,d){f.startTime=(new Date).getTime();var e;e=a.save_key?{token:that.token}:{key:i(b,c,d),token:that.token},logger.debug("directUpload multipart_params_obj: ",e);var h=a.x_vars;if(void 0!==h&&"object"==typeof h)for(var j in h)h.hasOwnProperty(j)&&("function"==typeof h[j]?e["x:"+j]=h[j](b,c):"object"!=typeof h[j]&&(e["x:"+j]=h[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:g()?a.max_file_size:void 0,multipart_params:e})};var g=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===mOxie.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===mOxie.Env.OS.toLowerCase()?!0:!1};var k=b.getOption&&b.getOption("chunk_size");if(k=k||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",j.runtime),logger.debug("chunk_size: ",k),"html5"!==j.runtime&&"flash"!==j.runtime||!k)logger.debug("directUpload because uploader.runtime !== 'html5' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==l.percent&&c.size===l.total?(c.percent=l.percent,c.loaded=l.offset,e=l.ctx,f.isResumeUpload=!0,f.resumeFilesize=l.offset,l.offset+m>c.size&&(m=c.size-l.offset)):localStorage.removeItem(c.name)}f.startTime=(new Date).getTime(),b.setOption({url:qiniuUploadUrl+"/mkblk/"+m,multipart:!1,chunk_size:k,required_features:"chunks",headers:{Authorization:"UpToken "+that.token},multipart_params:{}})}}),logger.debug("bind BeforeUpload event"),j.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),f.currentTime=(new Date).getTime();var c=f.currentTime-f.startTime;var d=b.loaded||0;f.isResumeUpload&&(d=b.loaded-f.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),j.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated");var d=that.parseJSON(c.response);e=e?e+","+d.ctx:d.ctx;var f=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>f&&a.setOption({url:qiniuUploadUrl+"/mkblk/"+f}),localStorage.setItem(b.name,JSON.stringify({ctx:e,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event"),j.bind("Error",function(a){return function(b,c){logger.error("Error event activated"),logger.error("err: ",c);var d="";var e=c.file;if(e){switch(c.code){case plupload.FAILED:d="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var f=b.getOption&&b.getOption("max_file_size");f=f||b.settings&&b.settings.max_file_size,d="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+f+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:d="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===c.response){d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002";break}var g=that.parseJSON(c.response);var h=g.error;switch(c.status){case 400:d="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:d="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:d="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:d="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 614:d="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{g=that.parseJSON(g.error),h=g.error||"file exists"}catch(i){h=g.error||"file exists"}break;case 631:d="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:d="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:d="\u672a\u77e5\u9519\u8bef\u3002"}d=d+"("+c.status+"\uff1a"+h+")";break;case plupload.SECURITY_ERROR:d="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:d="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:d="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:d="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",j.destroy();break;default:d=c.message+c.details}a&&a(b,c,d)}b.refresh()}}(c)),logger.debug("bind Error event"),j.bind("FileUploaded",function(b){return function(c,d,f){logger.debug("FileUploaded event activated");var g=function(c,d,e){if(a.downtoken_url){var f=that.createAjax();f.open("POST",a.downtoken_url,!0),f.setRequestHeader("Content-type","application/x-www-form-urlencoded"),f.onreadystatechange=function(){if(4===f.readyState)if(200===f.status){var a;try{a=that.parseJSON(f.responseText)}catch(g){throw"invalid json format"}var h={};plupload.extend(h,that.parseJSON(e),a),b&&b(c,d,JSON.stringify(h))}else j.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e).key+"&domain="+a.domain)}else b&&b(c,d,e)};var h=that.parseJSON(f.response);if(e=e?e:h.ctx){var k="";a.save_key||(k=i(c,d,that.key_handler),k=k?"/key/"+that.URLSafeBase64Encode(k):"");var l="/fname/"+that.URLSafeBase64Encode(d.name);var m=a.x_vars,n="",o="";if(void 0!==m&&"object"==typeof m)for(var p in m)m.hasOwnProperty(p)&&("function"==typeof m[p]?n=that.URLSafeBase64Encode(m[p](c,d)):"object"!=typeof m[p]&&(n=that.URLSafeBase64Encode(m[p])),o+="/x:"+p+"/"+n);var q=qiniuUploadUrl+"/mkfile/"+d.size+k+l+o;var r=that.createAjax();r.open("POST",q,!0),r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),r.setRequestHeader("Authorization","UpToken "+that.token),r.onreadystatechange=function(){if(4===r.readyState)if(localStorage.removeItem(d.name),200===r.status){var a=r.responseText;g(c,d,a)}else j.trigger("Error",{status:r.status,response:r.responseText,file:d,code:-200})},r.send(e)}else g(c,d,f.response)}}(d)),logger.debug("bind FileUploaded event"),j.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),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.q||"",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||"";var 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=this.getUrl(a)+"?imageInfo";var c=this.createAjax();var d;var e=this;return c.open("GET",b,!1),c.onreadystatechange=function(){4===c.readyState&&200===c.status&&(d=e.parseJSON(c.responseText))},c.send(),d},this.exif=function(a){if(!a)return!1;var b=this.getUrl(a)+"?exif";var c=this.createAjax();var d;var e=this;return c.open("GET",b,!1),c.onreadystatechange=function(){4===c.readyState&&200===c.status&&(d=e.parseJSON(c.responseText))},c.send(),d},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="[object Array]"===Object.prototype.toString.call(a);var d,e,f="";if(c){for(var g=0,h=a.length;h>g;g++){if(d=a[g],!d.fop)return!1;switch(d.fop){case"watermark":f+=this.watermark(d)+"|";break;case"imageView2":f+=this.imageView2(d)+"|";break;case"imageMogr2":f+=this.imageMogr2(d)+"|";break;default:e=!0}if(e)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;global.Qiniu=Qiniu,global.QiniuJsSDK=QiniuJsSDK}(window); //# sourceMappingURL=dist/qiniu.min.map \ No newline at end of file diff --git a/dist/qiniu.min.map b/dist/qiniu.min.map index 58c559d9..f5bf1f1b 100644 --- a/dist/qiniu.min.map +++ b/dist/qiniu.min.map @@ -1 +1 @@ -{"version":3,"file":"dist/qiniu.min.js","sources":["dist/qiniu.js"],"names":["global","QiniuJsSDK","qiniuUploadUrl","window","location","protocol","this","detectIEVersion","v","div","document","createElement","all","getElementsByTagName","innerHTML","isImage","url","res","suffix","imageSuffixes","suffixMatch","test","exec","toLowerCase","i","l","length","getFileExtension","filename","tempArr","split","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","slice","base64_encode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","tmp_arr","charAt","join","URLSafeBase64Encode","replace","createAjax","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","trim","text","that","uploader","op","domain","browse_button","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","uptoken_url","token","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","mOxie","Env","browser","version","os","osVersion","runtimes","indexOf","plupload","parseSize","getUpToken","uptoken","ajax","open","setRequestHeader","onreadystatechange","readyState","status","responseText","send","getFileKey","up","file","func","key","unique_names","save_key","getOption","settings","name","id","extend","multipart_params","Uploader","bind","params","files","auto_start","each","refresh","speed","get_new_uptoken","directUpload","Date","getTime","multipart_params_obj","x_vars","undefined","x_key","hasOwnProperty","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","navigator","userAgent","match","OS","runtime","size","localFileInfo","localStorage","getItem","blockSize","now","before","time","aDay","percent","total","loaded","offset","removeItem","required_features","headers","Authorization","timeUsed","fileUploaded","toFixed","info","response","leftSize","setItem","stringify","err","errTip","code","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","error","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","getUrl","encodeURI","imageView2","mode","w","h","q","format","imageUrl","imageMogr2","auto_orient","thumbnail","strip","gravity","crop","quality","rotate","blur","watermark","image","font","fontsize","fill","dissolve","dx","dy","imageInfo","xhr","exif","get","type","pipeline","arr","isArray","Object","prototype","toString","call","errOp","len","fop","Qiniu"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dist/qiniu.min.js","sources":["dist/qiniu.js"],"names":["global","QiniuJsSDK","that","this","qiniuUploadUrl","window","location","protocol","detectIEVersion","v","div","document","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","i","length","stringifyJSON","console","unshift","apply","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","isImage","url","res","suffix","imageSuffixes","suffixMatch","test","exec","l","getFileExtension","filename","tempArr","split","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_encode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","tmp_arr","charAt","join","URLSafeBase64Encode","replace","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","log_level","domain","browse_button","debug","mOxie","Env","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","uptoken_url","token","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","browser","version","os","osVersion","runtimes","indexOf","plupload","parseSize","getUpToken","uptoken","ajax","open","setRequestHeader","onreadystatechange","readyState","status","responseText","send","getFileKey","up","file","key","unique_names","save_key","getOption","settings","name","id","extend","multipart_params","Uploader","bind","params","files","auto_start","setTimeout","refresh","speed","get_new_uptoken","directUpload","Date","getTime","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","OS","runtime","size","localFileInfo","localStorage","getItem","blockSize","now","before","time","aDay","percent","total","loaded","offset","removeItem","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","setItem","err","error","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","getUrl","encodeURI","imageView2","mode","w","h","q","format","imageUrl","imageMogr2","auto_orient","thumbnail","strip","gravity","crop","quality","rotate","blur","watermark","image","font","fontsize","fill","dissolve","dx","dy","imageInfo","xhr","exif","get","pipeline","arr","isArray","Object","errOp","fop","Qiniu"],"mappings":"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"} \ No newline at end of file diff --git a/src/qiniu.js b/src/qiniu.js index 3e966c6c..c34176b2 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -18,6 +18,8 @@ function QiniuJsSDK() { + var that = this; + var qiniuUploadUrl; if (window.location.protocol === 'https:') { qiniuUploadUrl = 'https://up.qbox.me'; @@ -46,6 +48,53 @@ function QiniuJsSDK() { return v > 4 ? v : false; }; + var logger = { + MUTE: 0, + FATA: 1, + ERROR: 2, + WARN: 3, + INFO: 4, + DEBUG: 5, + TRACE: 6, + level: 0 + }; + + function log(type, args){ + var header = "[qiniu-js-sdk]["+type+"]"; + if (that.detectIEVersion()) { + // http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9 + //var log = Function.prototype.bind.call(console.log, console); + //log.apply(console, args); + var msg = header; + for (var i = 0; i < args.length; i++) { + msg+=that.stringifyJSON(args[i]); + } + console.log(msg); + }else{ + args.unshift(header); + console.log.apply(console, args); + } + } + + function makeLogFunc(code){ + var func = code.toLowerCase(); + logger[func] = function(){ + // logger[func].history = logger[func].history || []; + // logger[func].history.push(arguments); + if(window.console && window.console.log && logger.level>=logger[code]){ + var args = Array.prototype.slice.call(arguments); + log(func,args); + } + }; + } + + for (var property in logger){ + if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) { + makeLogFunc(property); + } + } + + /** * is image * @param {String} url of a file @@ -240,7 +289,7 @@ function QiniuJsSDK() { * craete object used to AJAX * @return {Object} */ - this.createAjax = function() { + this.createAjax = function(argument) { var xmlhttp = {}; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); @@ -262,24 +311,78 @@ function QiniuJsSDK() { return window.JSON.parse(data); } - if (data === null) { - return data; + //var rx_one = /^[\],:{}\s]*$/, + // rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + // rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + // rx_four = /(?:^|:|,)(?:\s*\[)+/g, + var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + + //var json; + + var text = String(data); + rx_dangerous.lastIndex = 0; + if(rx_dangerous.test(text)){ + text = text.replace(rx_dangerous, function(a){ + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); } - if (typeof data === "string") { - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = this.trim(data); + // todo 使用一下判断,增加安全性 + //if ( + // rx_one.test( + // text + // .replace(rx_two, '@') + // .replace(rx_three, ']') + // .replace(rx_four, '') + // ) + //) { + // return eval('(' + text + ')'); + //} - if (data) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, "@").replace(/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { + return eval('('+text+')'); + }; - return (function() { - return data; - })(); + /** + * parse javascript object to json string + * @param {Object} object + * @return {String} json string + */ + this.stringifyJSON = function(obj) { + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.stringify) { + return window.JSON.stringify(obj); + } + switch (typeof (obj)) { + case 'string': + return '"' + obj.replace(/(["\\])/g, '\\$1') + '"'; + case 'array': + return '[' + obj.map(that.stringifyJSON).join(',') + ']'; + case 'object': + if (obj instanceof Array) { + var strArr = []; + var len = obj.length; + for (var i = 0; i < len; i++) { + strArr.push(that.stringifyJSON(obj[i])); + } + return '[' + strArr.join(',') + ']'; + } else if (obj === null) { + return 'null'; + } else { + var string = []; + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + string.push(that.stringifyJSON(property) + ':' + that.stringifyJSON(obj[property])); + } + } + return '{' + string.join(',') + '}'; } - } + break; + case 'number': + return obj; + case false: + return obj; + case 'boolean': + return obj; } }; @@ -292,14 +395,17 @@ function QiniuJsSDK() { return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); }; - var that = this; - /** * create a uploader by QiniuJsSDK * @param {object} options to create a new uploader * @return {object} uploader */ this.uploader = function(op) { + + if (op.log_level) { + logger.level = op.log_level; + } + if (!op.domain) { throw 'domain setting in options is required!'; } @@ -308,6 +414,12 @@ function QiniuJsSDK() { throw 'browse_button setting in options is required!'; } + logger.debug("init uploader start"); + + logger.debug("environment: ", mOxie.Env); + + logger.debug("userAgent: ", navigator.userAgent); + var option = {}; // hold the handler from user passed options @@ -367,6 +479,8 @@ function QiniuJsSDK() { }; reset_chunk_size(); + logger.debug("invoke reset_chunk_size()"); + logger.debug("op.chunk_size: ", op.chunk_size); // if op.uptoken has no value // get token from 'uptoken_url' @@ -418,37 +532,54 @@ function QiniuJsSDK() { } }); + logger.debug("option: ", option); + // create a new uploader with composed options var uploader = new plupload.Uploader(option); + logger.debug("new plupload.Uploader(option)"); + // bind getUpToken to 'Init' event uploader.bind('Init', function(up, params) { + logger.debug("Init event activated"); getUpToken(); }); - // init uploader - uploader.init(); + logger.debug("bind Init event"); // bind 'FilesAdded' event // when file be added and auto_start has set value // uploader will auto start upload the file uploader.bind('FilesAdded', function(up, files) { + logger.debug("FilesAdded event activated"); var auto_start = up.getOption && up.getOption('auto_start'); auto_start = auto_start || (up.settings && up.settings.auto_start); + logger.debug("auto_start: ", auto_start); + logger.debug("files: ", files); if (auto_start) { - plupload.each(files, function(i, file) { + setTimeout(function(){ up.start(); - }); + logger.debug("invoke up.start()"); + }, 0); + // up.start(); + // plupload.each(files, function(i, file) { + // up.start(); + // logger.debug("invoke up.start()") + // logger.debug("file: ", file); + // }); } up.refresh(); // Reposition Flash/Silverlight }); + logger.debug("bind FilesAdded event"); + // bind 'BeforeUpload' event // intercept the process of upload // - prepare uptoken // - according the chunk size to make differnt upload strategy // - resume upload with the last breakpoint of file uploader.bind('BeforeUpload', function(up, file) { + logger.debug("BeforeUpload event activated"); // add a key named speed for file object file.speed = file.speed || 0; ctx = ''; @@ -471,6 +602,8 @@ function QiniuJsSDK() { }; } + logger.debug("directUpload multipart_params_obj: ", multipart_params_obj); + var x_vars = op.x_vars; if (x_vars !== undefined && typeof x_vars === 'object') { for (var x_key in x_vars) { @@ -496,7 +629,7 @@ function QiniuJsSDK() { // detect is weixin or qq inner browser var is_android_weixin_or_qq = function (){ var ua = navigator.userAgent.toLowerCase(); - if((ua.match(/MicroMessenger/i) || mOxie.Env.browser === "QQBrowser") && mOxie.Env.OS.toLowerCase()==="android") { + if((ua.match(/MicroMessenger/i) || mOxie.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && mOxie.Env.OS.toLowerCase()==="android") { return true; } else { return false; @@ -505,9 +638,14 @@ function QiniuJsSDK() { var chunk_size = up.getOption && up.getOption('chunk_size'); chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + + logger.debug("uploader.runtime: ",uploader.runtime); + logger.debug("chunk_size: ",chunk_size); + // TODO: flash support chunk upload - if (uploader.runtime === 'html5' && chunk_size) { + if ((uploader.runtime === 'html5' || uploader.runtime === 'flash') && chunk_size) { if (file.size < chunk_size || is_android_weixin_or_qq()) { + logger.debug("directUpload because file.size < chunk_size || is_android_weixin_or_qq()"); // direct upload if file size is less then the chunk size directUpload(up, file, that.key_handler); } else { @@ -575,14 +713,18 @@ function QiniuJsSDK() { }); } } else { + logger.debug("directUpload because uploader.runtime !== 'html5' || !chunk_size"); // direct upload if runtime is not html5 directUpload(up, file, that.key_handler); } }); + logger.debug("bind BeforeUpload event"); + // bind 'UploadProgress' event // calculate upload speed uploader.bind('UploadProgress', function(up, file) { + logger.trace("UploadProgress event activated"); speedCalInfo.currentTime = new Date().getTime(); var timeUsed = speedCalInfo.currentTime - speedCalInfo.startTime; // ms var fileUploaded = file.loaded || 0; @@ -592,9 +734,12 @@ function QiniuJsSDK() { file.speed = (fileUploaded / timeUsed * 1000).toFixed(0) || 0; // unit: byte/s }); + logger.debug("bind UploadProgress event"); + // bind 'ChunkUploaded' event // store the chunk upload info and set next chunk upload url uploader.bind('ChunkUploaded', function(up, file, info) { + logger.debug("ChunkUploaded event activated"); var res = that.parseJSON(info.response); // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' ctx = ctx ? ctx + ',' + res.ctx : res.ctx; @@ -615,10 +760,14 @@ function QiniuJsSDK() { })); }); + logger.debug("bind ChunkUploaded event"); + // bind 'Error' event // check the err.code and return the errTip uploader.bind('Error', (function(_Error_Handler) { return function(up, err) { + logger.error("Error event activated"); + logger.error("err: ", err); var errTip = ''; var file = err.file; if (file) { @@ -704,12 +853,15 @@ function QiniuJsSDK() { }; })(_Error_Handler)); + logger.debug("bind Error event"); + // bind 'FileUploaded' event // intercept the complete of upload // - get downtoken from downtoken_url if bucket is private // - invoke mkfile api to compose chunks if upload strategy is chunk upload uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { + logger.debug("FileUploaded event activated"); var last_step = function(up, file, info) { if (op.downtoken_url) { @@ -810,6 +962,15 @@ function QiniuJsSDK() { }; })(_FileUploaded_Handler)); + logger.debug("bind FileUploaded event"); + + // init uploader + uploader.init(); + + logger.debug("invoke uploader.init()"); + + logger.debug("init uploader end"); + return uploader; };