From 9df1d4fe4b225b36ce3db6803f93d7975833ad89 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Mon, 6 Feb 2017 15:05:48 +0800 Subject: [PATCH 01/44] add formdata demo and modify readme.md --- .gitignore | 1 + README.md | 14 +++++-- demo/config.js.example | 4 +- demo/scripts/formdata.js | 57 +++++++++++++++++++++++++++++ demo/server.js | 15 +++++++- demo/styles/formdata.css | 79 ++++++++++++++++++++++++++++++++++++++++ demo/views/formdata.html | 45 +++++++++++++++++++++++ dist/qiniu.js | 18 +++++---- dist/qiniu.min.js | 4 +- dist/qiniu.min.map | 2 +- package.json | 2 +- src/qiniu.js | 11 ++++-- 12 files changed, 230 insertions(+), 22 deletions(-) create mode 100644 demo/scripts/formdata.js create mode 100644 demo/styles/formdata.css create mode 100644 demo/views/formdata.html diff --git a/.gitignore b/.gitignore index d1f29c32..a37385d1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules bower_components demo/config.js +demo/deploy.sh diff --git a/README.md b/README.md index 0c57dbcd..e6a6f4e0 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ Qiniu-JavaScript-SDK Qiniu-JavaScript-SDK (下文简称为 JS-SDK)适用于 IE8+、Chrome、Firefox、Safari 等浏览器,基于七牛云存储官方 API 构建,其中上传功能基于 [Plupload](http://www.plupload.com/) 插件封装。开发者基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作。 +不考虑兼容性的情况下,如手机端,建议直接使用 Formdata 结合七牛[表单上传](https://developer.qiniu.com/kodo/manual/form-upload)的方式上传文件。 + +[ Formdata 上传 demo ](http://jssdk.demo.qiniu.io/formdata) + +![ Formdata ](http://oky1vwhqm.bkt.clouddn.com/1486368013.png) + Qiniu-JavaScript-SDK 为客户端 SDK,没有包含 token 生成实现,为了安全,token 建议通过网络从服务端获取,具体生成代码可以参考以下服务端 SDK 的文档。 - [Java](http://developer.qiniu.com/code/v7/sdk/android.html) @@ -190,7 +196,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js // Ajax请求downToken的Url,私有空间时使用,JS-SDK 将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址 // unique_names: true, // 默认 false,key 为文件名。若开启该选项,JS-SDK 会为每个文件自动生成key(文件名) // save_key: true, // 默认 false。若在服务端生成 uptoken 的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 - domain: '', // bucket 域名,下载资源时用到,**必需** + domain: '', // bucket 域名,下载资源时用到,如:'http://xxx.bkt.clouddn.com/' **必需** container: 'container', // 上传区域 DOM ID,默认是 browser_button 的父元素, max_file_size: '100mb', // 最大文件体积限制 flash_swf_url: 'path/of/plupload/Moxie.swf', //引入 flash,相对路径 @@ -449,7 +455,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js ### 运行示例 -1. 进入项目根目录,执行 `make install` 安装依赖第三方库 +1. 进入项目根目录,执行 `make install` 或 `npm install & bower install` 安装依赖第三方库 2. 进入 `demo` 目录,按照目录下的 `config.example` 示例,创建 `config.js` 文件,其中,`Access Key` 和 `Secret Key` 按如下方式获取 * [开通七牛开发者帐号](https://portal.qiniu.com/signup) @@ -463,11 +469,11 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js 'Bucket_Name': '', 'Port': 19110, 'Uptoken_Url': '', // demo 启动后会在本地 /uptoken 上提供获取 uptoken 的接口,所以这里可以填 'uptoken' - 'Domain': '' + 'Domain': '' // Bucket 的外链默认域名,在 Bucket 的内容管理里查看,如:'http://xxx.bkt.clouddn.com/' } ``` -3. 进入项目根目录,执行 `make dev` 访问 `http://127.0.0.1:19110/` 或 `http://localhost:19110/` +3. 进入项目根目录,执行 `make dev` 或 `node demo/server.js` 访问命令行打印出的 demo 地址。 ### 说明 diff --git a/demo/config.js.example b/demo/config.js.example index a1ecff80..64babd73 100644 --- a/demo/config.js.example +++ b/demo/config.js.example @@ -1,8 +1,8 @@ module.exports = { - 'ACCESS_KEY': '', + 'ACCESS_KEY': '', // https://portal.qiniu.com/user/key 'SECRET_KEY': '', 'Bucket_Name': '', 'Port': 19110, 'Uptoken_Url': 'uptoken', - 'Domain': 'http://qiniu-plupload.qiniudn.com/' + 'Domain': '' // bucket domain eg:http://qiniu-plupload.qiniudn.com/ }; diff --git a/demo/scripts/formdata.js b/demo/scripts/formdata.js new file mode 100644 index 00000000..7ab534b5 --- /dev/null +++ b/demo/scripts/formdata.js @@ -0,0 +1,57 @@ +// jQuery zepto vue angular 等库皆有 progress 的实现 以jQuery为例: +$(function(){ + var $key = $('#key'); // file name eg: the file is image.jpg,but $key='a.jpg', you will upload the file named 'a.jpg' + var $userfile = $('#userfile'); // the file you selected + + // upload info + var $selectedFile = $('.selected-file'); + var $progress = $(".progress"); + var $uploadedResult = $('.uploaded-result'); + + $("#userfile").change(function() { // you can ues 'onchange' here to uplpad automatically after select a file + $uploadedResult.html(''); + var selectedFile = $userfile.val(); + if (selectedFile) { + // randomly generate the final file name + var ramdomName = Math.random().toString(36).substr(2) + $userfile.val().match(/\.?[^.\/]+$/); + $key.val(ramdomName); + $selectedFile.html('文件:' + selectedFile); + } else { + return false; + } + var f = new FormData(document.getElementById("testform")); + $.ajax({ + url: 'http://upload.qiniu.com/', // Different bucket zone has different upload url, you can get right url by the browser error massage when uploading a file with wrong upload url. + type: 'POST', + data: f, + processData: false, + contentType: false, + xhr: function(){ + myXhr = $.ajaxSettings.xhr(); + if(myXhr.upload){ + myXhr.upload.addEventListener('progress',function(e) { + // console.log(e); + if (e.lengthComputable) { + var percent = e.loaded/e.total*100; + $progress.html('上传:' + e.loaded + "/" + e.total+" bytes. " + percent.toFixed(2) + "%"); + } + }, false); + } + return myXhr; + }, + success: function(res) { + console.log("成功:" + JSON.stringify(res)); + var str = '已上传:' + res.key + ''; + if (res.key && res.key.match(/\.(jpg|jpeg|png|gif)$/)) { + str += ''; + } + $uploadedResult.html(str); + }, + error: function(res) { + console.log("失败:" + JSON.stringify(res)); + $uploadedResult.html('上传失败:' + res.responseText); + } + }); + return false; + }); +}); \ No newline at end of file diff --git a/demo/server.js b/demo/server.js index baf4d614..e36076fc 100644 --- a/demo/server.js +++ b/demo/server.js @@ -75,6 +75,14 @@ app.get('/multiple', function(req, res) { }); }); +app.get('/formdata', function(req, res) { + var token = uptoken.token(); + res.render('formdata.html', { + domain: config.Domain, + uptoken: token + }); +}); + qiniu.conf.ACCESS_KEY = config.ACCESS_KEY; qiniu.conf.SECRET_KEY = config.SECRET_KEY; @@ -82,5 +90,10 @@ var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name); app.listen(config.Port, function() { - console.log('Listening on port %d', config.Port); + console.log('Listening on port %d\n', config.Port); + console.log('▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ Demos ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽') + console.log(' ▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹ Upload: http://127.0.0.1:%d ◁ ◁ ◁ ◁ ◁ ◁ ◁', config.Port); + console.log(' ▹▹▹▹▹▹▹ Multiple upload: http://127.0.0.1:%d/multiple ◁ ◁ ◁', config.Port); + console.log(' ▹▹▹▹▹▹▹ Formdata upload: http://127.0.0.1:%d/formdata ◁ ◁ ◁', config.Port); + console.log('△ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △\n'); }); diff --git a/demo/styles/formdata.css b/demo/styles/formdata.css new file mode 100644 index 00000000..34fad74c --- /dev/null +++ b/demo/styles/formdata.css @@ -0,0 +1,79 @@ +#testform{ + display: none; +} +body{ + padding: 0; + margin:0; + font-family: Tahoma,Arial,Roboto,"Droid Sans","Helvetica Neue","Droid Sans Fallback","Heiti SC",sans-self; + color: #666; +} +.title{ + background-color: #0983C7; + line-height: 40px; + text-align: center; + color:#fff; + font-family: '微软雅黑'; +} +.container{ + width: 100%; + margin:0 auto; + max-width:640px; + background-color: #fff; + border-radius: 10px; + min-height: 600px; +} +label{ + display:block; + width: 300px; + height:150px; + margin: 30px auto; + border-radius: 10px; + border:2px dashed #ddd; + overflow: hidden; + cursor: pointer; +} +label span{ + display:block; + width:50px; + height:50px; + border-radius: 100%; + border:3px solid #0983C7; + margin:30px auto 15px; + position:relative; +} +label em{ + font-style: normal; + text-align: center; + display:block; +} +label span:before, label span:after{ + display:block; + content:''; + background-color: #0983C7; + position: absolute; +} +label span:before{ + width:3px; + height:30px; + top:10px; + left:24px; +} +label span:after{ + width:30px; + height:3px; + top:24px; + left:10px; +} +.selected-file, .progress, .uploaded-result{ + line-height: 30px; + margin: 0 20px; +} +.uploaded-result span{ + display: block; +} +.uploaded-result img{ + display:block; + margin: 20px auto; + width:100%; + max-width: 100%; +} diff --git a/demo/views/formdata.html b/demo/views/formdata.html new file mode 100644 index 00000000..fbd5af24 --- /dev/null +++ b/demo/views/formdata.html @@ -0,0 +1,45 @@ + + + + + + formdata 上传 demo + + + + + + +
+
Formdata 上传 demo
+ + +
+ + + + + + + + + + + +
+ + + + + +
+
+
+
+ + \ No newline at end of file diff --git a/dist/qiniu.js b/dist/qiniu.js index ecbc147e..24f5fa84 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -1,12 +1,12 @@ /*! - * qiniu-js-sdk v1.0.17.1 + * qiniu-js-sdk v1.0.18 * * Copyright 2015 by Qiniu * Released under GPL V2 License. * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2016-10-13 + * Date: 2017-2-6 */ /*global plupload ,mOxie*/ @@ -1335,7 +1335,8 @@ function QiniuJsSDK() { status: ajax.status, response: ajax.responseText, file: file, - code: -200 + code: -200, + responseHeaders: ajax.getAllResponseHeaders() }; logger.debug("mkfile is error: ", info); uploader.trigger('Error', info); @@ -1392,14 +1393,17 @@ function QiniuJsSDK() { * @return {String} url of processed image */ this.imageView2 = function(op, key) { - var mode = op.mode || '', + + if (!/^\d$/.test(op.mode)) { + return false; + } + + var mode = op.mode, w = op.w || '', h = op.h || '', q = op.q || '', format = op.format || ''; - if (!mode) { - return false; - } + if (!w && !h) { return false; } diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 96a9c0b7..65434a5e 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ -/*! qiniu-js v1.0.17.1 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=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))};var c=function(a){var b=[];for(var c=0;c=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!0);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===mOxie.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=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 i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("file: ",b),logger.debug("info: ",c);var d=that.parseJSON(c.response);logger.debug("res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("file: ",d),logger.debug("info: ",e);var f=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,that.stringifyJSON(h))}else p.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 g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a=s.responseText,logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e.response)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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); +/*! qiniu-js v1.0.18 | Copyright 2015 by Qiniu */ +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=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))};var c=function(a){var b=[];for(var c=0;c=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!0);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===mOxie.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=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 i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("file: ",b),logger.debug("info: ",c);var d=that.parseJSON(c.response);logger.debug("res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("file: ",d),logger.debug("info: ",e);var f=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,that.stringifyJSON(h))}else p.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 g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a=s.responseText,logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e.response)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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 de24ea90..bca46a27 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","mOxie","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","host","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","setRequestHeader","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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 +{"version":3,"file":"dist/qiniu.min.js","sources":["dist/qiniu.js"],"names":["global","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","mOxie","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","host","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","setRequestHeader","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","responseHeaders","getAllResponseHeaders","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":";CAgBC,SAAWA,QAQZ,QAASC,cAAaC,EAAKC,EAAOC,GAC9B,GAAIC,GAAO,GAAIC,KACfD,GAAKE,QAAQF,EAAKG,UAAmB,GAANJ,EAAW,GAAK,GAAK,IACpD,IAAIK,GAAU,aAAeJ,EAAKK,aAClCC,UAASC,OAASV,EAAM,IAAMC,EAAQM,EAAU,WAOpD,QAASI,YAAWX,GAChB,GAAIY,GAASZ,EAAM,GACnB,IAAIa,GAAKJ,SAASC,OAAOI,MAAM,IAC/B,KAAK,GAAIC,GAAI,EAAGC,EAAMH,EAAGI,OAAYD,EAAJD,EAASA,IAAK,CAC3C,GAAIG,GAAIL,EAAGE,EACX,OAAuB,MAAhBG,EAAEC,OAAO,GACZD,EAAIA,EAAEE,UAAU,EAAGF,EAAED,OAEzB,IAA0B,IAAtBC,EAAEG,QAAQT,GACV,MAAOM,GAAEE,UAAUR,EAAOK,OAAQC,EAAED,QAG5C,MAAO,MAKLK,OAAOC,eACTD,OAAOC,cACHC,QAAS,SAAUxB,EAAKC,GACpBF,aAAaC,EAAKC,EAAO,KAE7BwB,QAAS,SAAUzB,GACf,MAAOW,YAAWX,IAEtB0B,WAAY,SAAU1B,GAClBD,aAAaC,EAAK,GAAI,MAKlC,SAAS2B,cAEL,GAAIC,MAAOC,IAUXA,MAAKC,gBAAkB,WACnB,GAAIC,GAAI,EACJC,EAAMvB,SAASwB,cAAc,OAC7BC,EAAMF,EAAIG,qBAAqB,IACnC,OACIH,EAAII,UAAY,iBAAmBL,EAAI,wBACvCG,EAAI,GAEJH,GAEJ,OAAOA,GAAI,EAAIA,GAAI,EAGvB,IAAIM,SACAC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,MAAO,EACPC,MAAO,EAGX,SAASC,KAAIC,EAAMC,GACf,GAAIC,GAAS,kBAAkBF,EAAK,GACpC,IAAIG,GAAMD,CACV,KAAK,GAAIlC,GAAI,EAAGA,EAAIiC,EAAK/B,OAAQF,IAEzBmC,GADmB,gBAAZF,GAAKjC,GACL,IAAMiC,EAAKjC,GAEX,IAAMa,KAAKuB,cAAcH,EAAKjC,GAGzCa,MAAKE,kBAILsB,QAAQN,IAAII,IAEZF,EAAKK,QAAQJ,GACbG,QAAQN,IAAIQ,MAAMF,QAASJ,IAE3BvC,SAAS8C,eAAe,sBACxB9C,SAAS8C,eAAe,oBAAoBnB,WAAa,MAAMc,EAAI,QAI3E,QAASM,aAAYC,GACjB,GAAIC,GAAOD,EAAKE,aAChBtB,QAAOqB,GAAQ,WAGX,GAAGpC,OAAO8B,SAAW9B,OAAO8B,QAAQN,KAAOT,OAAOQ,OAAOR,OAAOoB,GAAM,CAClE,GAAIT,GAAOY,MAAMC,UAAUC,MAAMC,KAAKC,UACtClB,KAAIY,EAAKV,KAKrB,IAAK,GAAIiB,YAAY5B,QACbA,OAAO6B,eAAeD,WAA2C,gBAAtB5B,QAAO4B,YAA4B5B,OAAO6B,eAAeD,SAASN,gBAC7GH,YAAYS,SAKpB,IAAIE,eAEAA,gBAD6B,WAA7B7C,OAAO8C,SAASC,SACC,qBAEA,yBAQrB,IAAIC,kBACA,0BACA,sBAGJ,IAAIC,eACDC,MACI,0BACA,uBAEJC,OACI,sBAIP,IAAIC,gBAAiB,CASrB7C,MAAK8C,eAAiB,WACzB,GAAIC,GAAqC,WAA7BtD,OAAO8C,SAASC,SAAwBE,aAAaE,MAAQF,aAAaC,IACtF,IAAIzD,GAAI2D,eAAiBE,EAAM3D,MAC/BkD,gBAAiBS,EAAM7D,GACvB2D,iBACArC,OAAOwC,MAAM,mBAAmBV,iBAW7BtC,KAAKiD,QAAU,SAASC,GAEpB,MADAA,GAAMA,EAAIjE,MAAM,QAAQ,GACjB,6BAA+BkE,KAAKD,IAW/ClD,KAAKoD,iBAAmB,SAASC,GAC7B,GAAIC,GAAUD,EAASpE,MAAM,IAC7B,IAAIsE,EAMJ,OAJIA,GADmB,IAAnBD,EAAQlE,QAAgC,KAAfkE,EAAQ,IAAgC,IAAnBA,EAAQlE,OAChD,GAEAkE,EAAQE,MAAM1B,eAU5B9B,KAAKyD,YAAc,SAASC,GAgBxB,GAAkB,OAAdA,GAA2C,mBAAdA,GAC7B,MAAO,EAGX,IAAIC,GAAUD,EAAY,EAC1B,IAAIE,GAAU,GACVC,EAAOC,EAAKC,EAAU,CAE1BF,GAAQC,EAAM,EACdC,EAAUJ,EAAOvE,MACjB,KAAK,GAAI4E,GAAI,EAAOD,EAAJC,EAAaA,IAAK,CAC9B,GAAIC,GAAKN,EAAOO,WAAWF,EAC3B,IAAIG,GAAM,IAEV,IAAS,IAALF,EACAH,QACG,IAAIG,EAAK,KAAY,KAALA,EACnBE,EAAMC,OAAOC,aACRJ,GAAM,EAAK,IAAW,GAALA,EAAW,SAE9B,IAAS,MAALA,GAAc,EACrBE,EAAMC,OAAOC,aACRJ,GAAM,GAAM,IAAOA,GAAM,EAAK,GAAM,IAAW,GAALA,EAAW,SAEvD,CACH,GAAS,MAALA,GAAc,EACd,KAAM,IAAIK,YAAW,gCAAkCN,EAE3D,IAAIO,GAAKZ,EAAOO,aAAaF,EAC7B,IAAS,MAALO,GAAc,EACd,KAAM,IAAID,YAAW,gCAAkCN,EAAI,GAE/DC,KAAY,KAALA,IAAe,KAAY,KAALM,GAAc,MAC3CJ,EAAMC,OAAOC,aACRJ,GAAM,GAAM,IAAOA,GAAM,GAAM,GAAM,IAAOA,GAAM,EAAK,GAAM,IAAW,GAALA,EAAW,KAG3E,OAARE,IACIL,EAAMD,IACND,GAAWD,EAAO1B,MAAM4B,EAAOC,IAEnCF,GAAWO,EACXN,EAAQC,EAAME,EAAI,GAQ1B,MAJIF,GAAMD,IACND,GAAWD,EAAO1B,MAAM4B,EAAOE,IAG5BH,GAGX5D,KAAKwE,cAAgB,SAAUC,GAkB3B,GAAIC,GAAM,mEACV,IAAIC,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAMhG,EAAI,EAC1CiG,EAAK,EACLC,EAAM,GACNC,IAEA,KAAKZ,EACD,MAAOA,EAGXA,IAAQ,EAER,GACIK,GAAKJ,EAAIlF,QAAQiF,EAAKnF,OAAOJ,MAC7B6F,EAAKL,EAAIlF,QAAQiF,EAAKnF,OAAOJ,MAC7B8F,EAAKN,EAAIlF,QAAQiF,EAAKnF,OAAOJ,MAC7B+F,EAAKP,EAAIlF,QAAQiF,EAAKnF,OAAOJ,MAE7BgG,EAAOJ,GAAM,GAAKC,GAAM,GAAKC,GAAM,EAAIC,EAEvCN,EAAKO,GAAQ,GAAK,IAClBN,EAAKM,GAAQ,EAAI,IACjBL,EAAY,IAAPK,EAEM,KAAPF,EACAK,EAAQF,KAAQf,OAAOC,aAAaM,GACtB,KAAPM,EACPI,EAAQF,KAAQf,OAAOC,aAAaM,EAAIC,GAExCS,EAAQF,KAAQf,OAAOC,aAAaM,EAAIC,EAAIC,SAE3C3F,EAAIuF,EAAKrF,OAIlB,OAFAgG,GAAMC,EAAQC,KAAK,KAUvBtF,KAAKuF,cAAgB,SAASd,GAgB1B,GAAIC,GAAM,mEACV,IAAIC,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAMhG,EAAI,EACtCiG,EAAK,EACLhB,EAAM,GACNkB,IAEJ,KAAKZ,EACD,MAAOA,EAGXA,GAAOzE,KAAKyD,YAAYgB,EAAO,GAE/B,GACIE,GAAKF,EAAKP,WAAWhF,KACrB0F,EAAKH,EAAKP,WAAWhF,KACrB2F,EAAKJ,EAAKP,WAAWhF,KAErBgG,EAAOP,GAAM,GAAKC,GAAM,EAAIC,EAE5BC,EAAKI,GAAQ,GAAK,GAClBH,EAAKG,GAAQ,GAAK,GAClBF,EAAKE,GAAQ,EAAI,GACjBD,EAAY,GAAPC,EAGLG,EAAQF,KAAQT,EAAIpF,OAAOwF,GAAMJ,EAAIpF,OAAOyF,GAAML,EAAIpF,OAAO0F,GAAMN,EAAIpF,OAAO2F,SACzE/F,EAAIuF,EAAKrF,OAIlB,QAFA+E,EAAMkB,EAAQC,KAAK,IAEXb,EAAKrF,OAAS,GAClB,IAAK,GACD+E,EAAMA,EAAIlC,MAAM,EAAG,IAAM,IACzB,MACJ,KAAK,GACDkC,EAAMA,EAAIlC,MAAM,EAAG,IAAM,IAIjC,MAAOkC,IAQXnE,KAAKwF,oBAAsB,SAAStF,GAEhC,MADAA,GAAIF,KAAKuF,cAAcrF,GAChBA,EAAEuF,QAAQ,MAAO,KAAKA,QAAQ,MAAO,MAGhDzF,KAAK0F,oBAAsB,SAASxF,GAEhC,MADAA,GAAIA,EAAEuF,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAChCzF,KAAKwE,cAActE,IAQ9BF,KAAK2F,WAAa,SAASC,GACvB,GAAIC,KAMJ,OAJIA,GADApG,OAAOqG,eACG,GAAIA,gBAEJ,GAAIC,eAAc,sBAWpC/F,KAAKgG,UAAY,SAASvB,MAEtB,GAAIhF,OAAOwG,MAAQxG,OAAOwG,KAAKC,MAC3B,MAAOzG,QAAOwG,KAAKC,MAAMzB,KAO7B,IAAO0B,cAAe,0GAItB,IAAIC,MAAOhC,OAAOK,KAoBlB,OAnBA0B,cAAaE,UAAY,EACtBF,aAAahD,KAAKiD,QACjBA,KAAOA,KAAKX,QAAQU,aAAc,SAASG,GACxC,MAAO,OAAS,OAASA,EAAEpC,WAAW,GAAGqC,SAAS,KAAKtE,MAAM,OAgB7DuE,KAAK,IAAIJ,KAAK,MAQzBpG,KAAKsB,cAAgB,SAASmF,GAE1B,GAAIhH,OAAOwG,MAAQxG,OAAOwG,KAAKS,UAC3B,MAAOjH,QAAOwG,KAAKS,UAAUD,EAEjC,cAAe,IACX,IAAK,SACD,MAAO,IAAMA,EAAIhB,QAAQ,WAAY,QAAU,GACnD,KAAK,QACD,MAAO,IAAMgB,EAAIE,IAAI5G,KAAKuB,eAAegE,KAAK,KAAO,GACzD,KAAK,SACD,GAAImB,YAAe1E,OAAO,CACtB,GAAI6E,KACJ,IAAIC,GAAMJ,EAAIrH,MACd,KAAK,GAAIF,GAAI,EAAO2H,EAAJ3H,EAASA,IACrB0H,EAAOE,KAAK/G,KAAKuB,cAAcmF,EAAIvH,IAEvC,OAAO,IAAM0H,EAAOtB,KAAK,KAAO,IAC7B,GAAY,OAARmB,EACP,MAAO,MAEP,IAAI9C,KACJ,KAAK,GAAIvB,KAAYqE,GACbA,EAAIpE,eAAeD,IACnBuB,EAAOmD,KAAK/G,KAAKuB,cAAcc,GAAY,IAAMrC,KAAKuB,cAAcmF,EAAIrE,IAGhF,OAAO,IAAMuB,EAAO2B,KAAK,KAAO,GAGxC,KAAK,SACD,MAAOmB,EACX,MAAK,EACD,MAAOA,EACX,KAAK,UACD,MAAOA,KASnBzG,KAAK+G,KAAO,SAASX,GACjB,MAAgB,QAATA,EAAgB,GAAKA,EAAKX,QAAQ,aAAc,KAQ3DzF,KAAKgH,SAAW,SAASC,GAQrB,GAAIC,GAAmB,WACnB,GAAIC,GAAKpH,KAAKE,iBACd,IAAImH,GAAYC,EAAgBC,CAEhC,IAAIC,GAAyC,WAAtBC,MAAMC,IAAIC,SAAwBF,MAAMC,IAAIE,SAAW,GAAsB,YAAjBH,MAAMC,IAAIG,IAA4C,MAAxBJ,MAAMC,IAAII,WAA6C,WAAtBL,MAAMC,IAAIC,SAAyC,QAAjBF,MAAMC,IAAIG,IAAwC,MAAxBJ,MAAMC,IAAII,SAIpNV,IAAW,EAALA,GAAUF,EAAGK,YAAcL,EAAGa,SAAStI,QAAQ,UAAY,EAGjEyH,EAAGK,WAAa,EACTC,EAIPN,EAAGK,WAAa,GAEhBF,EAAa,GACbC,EAAiB,GAAKD,EAEtBE,EAAaS,SAASC,UAAUf,EAAGK,YAC/BA,EAAaD,IACbJ,EAAGK,WAAaD,IAQ5B,IAAIY,GAAW,SAASlF,GACpB,GAAImF,KACJ,KAAK,GAAIhJ,GAAI,EAAGA,EAAI6D,EAAM3D,OAAQF,IAAK,CACnC,GAAIiJ,GAAOpF,EAAM7D,EACU,KAAvBiJ,EAAK3I,QAAQ,MACb0I,EAAOpB,KAAKqB,EAAKlJ,MAAM,KAAK,IAE5BiJ,EAAOpB,KAAKqB,GAGpB,MAAOD,GAGX,IAAIE,GAAe,SAAUC,GACzB,GAAIC,GAAWD,EAAQpJ,MAAM,IAC7B,IAAIsJ,GAAKD,EAAS,EAClB,IAAIE,GAAYzI,KAAKiG,UAAUjG,KAAK2F,oBAAoB4C,EAAS,IAQjE,OAPAE,GAAUD,GAAKA,EACXC,EAAUC,MAAMjJ,QAAQ,MAAQ,GAChCgJ,EAAUE,OAASF,EAAUC,MAAMxJ,MAAM,KAAK,GAC9CuJ,EAAUrK,IAAMqK,EAAUC,MAAMxJ,MAAM,KAAK,IAE3CuJ,EAAUE,OAASF,EAAUC,MAE1BD,EAGX,IAAIG,GAAa,SAASN,GACtB,GAAIG,GAAYJ,EAAaC,EAG7B,IAAIO,GAAcnJ,OAAO8C,SAASC,SAAW,4BAA8BgG,EAAUD,GAAK,WAAaC,EAAUE,MACjHlI,QAAOwC,MAAM,cAAewF,GAC5BhI,OAAOwC,MAAM,qBAAsB4F,EACnC,IAAIzB,GAAKpH,KAAKE,iBACd,IAAI4I,EACA1B,IAAY,GAANA,GACN0B,EAAO,GAAIrB,OAAM1B,eACjB0B,MAAMC,IAAIqB,QAAU7B,EAAG8B,eAEvBF,EAAO9I,KAAK4F,aAEhBkD,EAAKG,KAAK,MAAOJ,GAAa,EAC9B,IAAIK,GAAqB,WAErB,GADAzI,OAAOwC,MAAM,oBAAqB6F,EAAKK,YACf,IAApBL,EAAKK,WAEL,GADA1I,OAAOwC,MAAM,gBAAiB6F,EAAKM,QAC/BN,EAAKM,OAAS,IAAK,CACnB,GAAIC,GAAMrJ,KAAKiG,UAAU6C,EAAKQ,aAC9B3G,cAAaC,KAAOsF,EAASmB,EAAIzG,KAAK2G,IACtC5G,aAAaE,MAAQqF,EAASmB,EAAIxG,MAAM0G,IACxC9I,OAAOwC,MAAM,oBAAqBN,cAClC3C,KAAK+C,qBAELtC,QAAO+I,MAAM,sBAAuBV,EAAKQ,cAIjDlC,IAAY,GAANA,EACN0B,EAAKW,KAAK,mBAAoBP,GAE9BJ,EAAKI,mBAAqBA,EAE9BJ,EAAKY,OAcT,IAAIC,GAAa,SAASC,GACtB,OAAK5J,KAAK6J,OAAU3C,EAAG4C,aAAe9J,KAAK+J,UAAUC,YAC1CC,EAAcL,GAEd5J,KAAK6J,MASpB,IAAII,GAAgB,SAASL,GACzB,GAAI1C,EAAGoB,QACHtI,KAAK6J,MAAQ3C,EAAGoB,YACb,IAAIpB,EAAG4C,YAAa,CACvBrJ,OAAOwC,MAAM,qBAAsBjD,KAAK8J,YAExC,IAAIhB,GAAO9I,KAAK4F,YAUhB,IATAkD,EAAKG,KAAK,MAAOjJ,KAAK8J,aAAa,GACnChB,EAAKoB,iBAAiB,oBAAqB,KAO3CpB,EAAKY,OACe,MAAhBZ,EAAKM,OAAgB,CACrB,GAAIC,GAAMrJ,KAAKiG,UAAU6C,EAAKQ,aAC9BtJ,MAAK6J,MAAQR,EAAIf,OACjB,IAAIC,GAAWvI,KAAK6J,MAAM3K,MAAM,IAChC,IAAIuJ,GAAYzI,KAAKiG,UAAUjG,KAAK2F,oBAAoB4C,EAAS,IAC5DvI,MAAKmK,WACNnK,KAAKmK,YAET,IAAIC,GAAe,SAASC,GACxB,MAAOC,MAAKC,KAAKF,EAAK3L,UAAU,KAEpC,IAAI8L,GAAaJ,EAAa,GAAI5L,MAAKsK,EAAK2B,kBAAkB,SAC9D,IAAIC,GAAaN,EAAa,GAAI5L,MAClCwB,MAAK+J,WACDY,YAAaD,EAAaF,EAC1BI,SAAUnC,EAAUmC,SACpBZ,UAAW,WACP,GAAIa,GAAW5K,KAAK2K,SAAWR,EAAa,GAAI5L,OAAUyB,KAAK0K,WAC/D,OAAkB,KAAXE,IAGfpK,OAAOwC,MAAM,oBAAqBjD,KAAK6J,OACvCpJ,OAAOwC,MAAM,mBAAoBjD,KAAK+J,eAEtCtJ,QAAO+I,MAAM,sBAAuBV,EAAKQ,kBAEtCpC,GAAG4D,cACVrK,OAAOwC,MAAM,iCACbjD,KAAK6J,MAAQ3C,EAAG4D,aAAalB,GAC7BnJ,OAAOwC,MAAM,oBAAqBjD,KAAK6J,QAEvCpJ,OAAO+I,MAAM,+EAKjB,OAHIxJ,MAAK6J,OACLjB,EAAW5I,KAAK6J,OAEb7J,KAAK6J,MAIhB,IAAIkB,GAAa,SAASxB,EAAIK,EAAM9H,GAUhC,GAAI1D,GAAM,GACN4M,GAAe,CACnB,KAAK9D,EAAG+D,SAGJ,GAFAD,EAAezB,EAAG2B,WAAa3B,EAAG2B,UAAU,gBAC5CF,EAAeA,GAAiBzB,EAAG4B,UAAY5B,EAAG4B,SAASH,aACzC,CACd,GAAIxH,GAAMxD,KAAKqD,iBAAiBuG,EAAKwB,KACrChN,GAAMoF,EAAMoG,EAAKyB,GAAK,IAAM7H,EAAMoG,EAAKyB,OAEvCjN,GADuB,kBAAT0D,GACRA,EAAKyH,EAAIK,GAETA,EAAKwB,IAGnB,OAAOhN,GASX,IAJI8I,EAAGoE,YACH7K,OAAOQ,MAAQiG,EAAGoE,YAGjBpE,EAAGqE,OACJ,KAAM,wCAGV,KAAKrE,EAAGsE,cACJ,KAAM,+CAGV,KAAKtE,EAAGoB,UAAYpB,EAAG4C,cAAgB5C,EAAG4D,aACtC,KAAM,8EAGVrK,QAAOwC,MAAM,uBAEbxC,OAAOwC,MAAM,gBAAiBwE,MAAMC,KAEpCjH,OAAOwC,MAAM,cAAewI,UAAUC,UAEtC,IAAIC,KAGJ,IAAIC,GAAiB1E,EAAG2E,MAAQ3E,EAAG2E,KAAKC,KACxC,IAAIC,GAAwB7E,EAAG2E,MAAQ3E,EAAG2E,KAAKG,YAG/C9E,GAAG2E,KAAKC,MAAQ,aAChB5E,EAAG2E,KAAKG,aAAe,aAEvBhM,KAAK8J,YAAc5C,EAAG4C,YACtB9J,KAAK6J,MAAQ,GACb7J,KAAKiM,YAAqC,kBAAhB/E,GAAG2E,KAAKK,IAAqBhF,EAAG2E,KAAKK,IAAM,GACrEjM,KAAKsL,OAASrE,EAAGqE,MAGjB,IAAIY,GAAM,EACV,IAAIC,IACAC,gBAAgB,EAChBC,eAAgB,EAChBC,UAAW,GACXC,YAAa,GAGjBrF,KACA1G,OAAOwC,MAAM,6BACbxC,OAAOwC,MAAM,kBAAmBiE,EAAGK,WAEnC,IAAIkF,IACAtJ,IAAKZ,eACLmK,kBACI7C,MAAO,IAGf,IAAIzC,GAAKpH,KAAKE,iBAGVkH,IAAY,GAANA,IACNqF,EAAeC,iBAAiBC,OAAS,4BACzClM,OAAOwC,MAAM,8CAIjB+E,SAAS4E,OAAOjB,EAAQzE,EAAIuF,GAE5BhM,OAAOwC,MAAM,WAAY0I,EAGzB,IAAI1E,GAAW,GAAIe,UAAS6E,SAASlB,EAErClL,QAAOwC,MAAM,iCAGbgE,EAASwC,KAAK,OAAQ,SAASF,EAAIuD,GAC/BrM,OAAOwC,MAAM,wBAKTiE,EAAG6F,iBACH9C,EAAc,QAKtBxJ,OAAOwC,MAAM,mBAKbgE,EAASwC,KAAK,aAAc,SAASF,EAAIyD,GACrCvM,OAAOwC,MAAM,6BACb,IAAIgK,GAAa1D,EAAG2B,WAAa3B,EAAG2B,UAAU,aAC9C+B,GAAaA,GAAe1D,EAAG4B,UAAY5B,EAAG4B,SAAS8B,WACvDxM,OAAOwC,MAAM,eAAgBgK,GAC7BxM,OAAOwC,MAAM,UAAW+J,EAGxB,IAAIE,GAAS,WACT,MAAgC,QAA7BzF,MAAMC,IAAIyF,GAAGpL,eACL,GAEA,EAKf,IAAImL,IACA,IAAK,GAAI/N,GAAI,EAAGA,EAAI6N,EAAM3N,OAAQF,IAAK,CACnC,GAAIyK,GAAOoD,EAAM7N,EACjB,IAAIqE,GAAMxD,KAAKqD,iBAAiBuG,EAAKwB,KACrCxB,GAAKwB,KAAOxB,EAAKyB,GAAK,IAAM7H,EAIhCyJ,GACAG,WAAW,WACP7D,EAAGzF,QACHrD,OAAOwC,MAAM,sBACd,GAQPsG,EAAG8D,YAGP5M,OAAOwC,MAAM,yBAObgE,EAASwC,KAAK,eAAgB,SAASF,EAAIK,GACvCnJ,OAAOwC,MAAM,gCAEb2G,EAAK0D,MAAQ1D,EAAK0D,OAAS,EAC3BnB,EAAM,GAEHjF,EAAG6F,iBACF9C,EAAcL,EAGlB,IAAI2D,GAAe,SAAShE,EAAIK,EAAM9H,GAClCsK,EAAaG,WAAY,GAAI/N,OAAOE,SACpC,IAAI8O,EAEAA,GADAtG,EAAG+D,UAECpB,MAAS7J,KAAK6J,QAIdzL,IAAO2M,EAAWxB,EAAIK,EAAM9H,GAC5B+H,MAAS7J,KAAK6J,MAGtB,IAAIzC,GAAKpH,KAAKE,iBAGVkH,IAAY,GAANA,IACNoG,EAAqBb,OAAS,4BAC9BlM,OAAOwC,MAAM,8CAGjBxC,OAAOwC,MAAM,sCAAuCuK,EAEpD,IAAIC,GAASvG,EAAGuG,MAChB,IAAeC,SAAXD,GAA0C,gBAAXA,GAC/B,IAAK,GAAIE,KAASF,GACVA,EAAOnL,eAAeqL,KACO,kBAAlBF,GAAOE,GACdH,EAAqB,KAAOG,GAASF,EAAOE,GAAOpE,EAAIK,GACvB,gBAAlB6D,GAAOE,KACrBH,EAAqB,KAAOG,GAASF,EAAOE,IAM5DpE,GAAGqE,WACCzK,IAAOZ,eACPsL,WAAa,EACbtG,WAAcuG,IAA4B5G,EAAG6G,cAAgBL,OAC7DhB,iBAAoBc,IAK5B,IAAIM,GAA0B,WAC1B,GAAIE,GAAKvC,UAAUC,UAAU3J,aAC7B,QAAIiM,EAAGC,MAAM,oBAA4C,cAAtBxG,MAAMC,IAAIC,SAA2BqG,EAAGC,MAAM,gBAA+C,YAA7BxG,MAAMC,IAAIyF,GAAGpL,eACrG,GAEA,EAIf,IAAIwF,GAAagC,EAAG2B,WAAa3B,EAAG2B,UAAU,aAO9C,IANA3D,EAAaA,GAAegC,EAAG4B,UAAY5B,EAAG4B,SAAS5D,WAEvD9G,OAAOwC,MAAM,qBAAqBgE,EAASiH,SAC3CzN,OAAOwC,MAAM,eAAesE,GAGF,UAArBN,EAASiH,SAA4C,UAArBjH,EAASiH,UAAwB3G,EA8ElE9G,OAAOwC,MAAM,oGAEbsK,EAAahE,EAAIK,EAAM5J,KAAKiM,iBA/E5B,IAAIrC,EAAKuE,KAAO5G,GAAcuG,IAC1BrN,OAAOwC,MAAM,4EAEbsK,EAAahE,EAAIK,EAAM5J,KAAKiM,iBACzB,CAIH,GAAImC,GAAgBzO,aAAaE,QAAQ+J,EAAKwB,KAC9C,IAAIiD,GAAY9G,CAChB,IAAI6G,EAAe,CAGfA,EAAgBpO,KAAKiG,UAAUmI,EAC/B,IAAIE,IAAM,GAAK9P,OAAQE,SACvB,IAAI6P,GAASH,EAAc/D,MAAQ,CACnC,IAAImE,GAAO,KAKQA,GAAfF,EAAMC,GAEwB,MAA1BH,EAAcK,SACV7E,EAAKuE,OAASC,EAAcM,OAG5B9E,EAAK6E,QAAUL,EAAcK,QAC7B7E,EAAK+E,OAASP,EAAcQ,OAC5BzC,EAAMiC,EAAcjC,IAGpBC,EAAaC,gBAAiB,EAC9BD,EAAaE,eAAiB8B,EAAcQ,OAGxCR,EAAcQ,OAASP,EAAYzE,EAAKuE,OACxCE,EAAYzE,EAAKuE,KAAOC,EAAcQ,SAclDjP,aAAaG,WAAW8J,EAAKwB,MAGrCgB,EAAaG,WAAY,GAAI/N,OAAOE,SACpC,IAAI8O,KACJ,IAAIpG,GAAKpH,KAAKE,iBAGVkH,IAAY,GAANA,IACNoG,EAAqBb,OAAS,4BAC9BlM,OAAOwC,MAAM,8CAIjBsG,EAAGqE,WACCzK,IAAOZ,eAAiB,UAAY8L,EACpCR,WAAa,EACbtG,WAAcA,EACdsH,kBAAqB,SACrBC,SACIC,cAAiB,WAAapF,EAAWC,IAE7C8C,iBAAoBc,OAUpC/M,OAAOwC,MAAM,2BAIbgE,EAASwC,KAAK,iBAAkB,SAASF,EAAIK,GACzCnJ,OAAOuO,MAAM,kCACb5C,EAAaI,aAAc,GAAIhO,OAAOE,SACtC,IAAIuQ,GAAW7C,EAAaI,YAAcJ,EAAaG,SACvD,IAAI2C,GAAetF,EAAK+E,QAAU,CAC9BvC,GAAaC,iBACb6C,EAAetF,EAAK+E,OAASvC,EAAaE,gBAE9C1C,EAAK0D,OAAS4B,EAAeD,EAAW,KAAME,QAAQ,IAAM,IAGhE1O,OAAOwC,MAAM,6BAIbgE,EAASwC,KAAK,gBAAiB,SAASF,EAAIK,EAAMwF,GAC9C3O,OAAOwC,MAAM,iCACbxC,OAAOwC,MAAM,SAAU2G,GACvBnJ,OAAOwC,MAAM,SAAUmM,EACvB,IAAI/F,GAAMrJ,KAAKiG,UAAUmJ,EAAKC,SAC9B5O,QAAOwC,MAAM,QAASoG,GAEtB8C,EAAMA,EAAMA,EAAM,IAAM9C,EAAI8C,IAAM9C,EAAI8C,GACtC,IAAImD,GAAWF,EAAKV,MAAQU,EAAKR,MACjC,IAAIrH,GAAagC,EAAG2B,WAAa3B,EAAG2B,UAAU,aAC9C3D,GAAaA,GAAegC,EAAG4B,UAAY5B,EAAG4B,SAAS5D,WACxCA,EAAX+H,IACA/F,EAAGqE,WACCzK,IAAOZ,eAAiB,UAAY+M,IAExC7O,OAAOwC,MAAM,qBAAsBV,eAAiB,UAAY+M,IAEpE/F,EAAGqE,WACCkB,SACIC,cAAiB,WAAapF,EAAWC,MAGjDjK,aAAaC,QAAQgK,EAAKwB,KAAMpL,KAAKuB,eACjC4K,IAAKA,EACLsC,QAAS7E,EAAK6E,QACdC,MAAOU,EAAKV,MACZE,OAAQQ,EAAKR,OACbvE,MAAM,GAAK7L,OAAQE,eAI3B+B,OAAOwC,MAAM,2BAEb,IAAIsM,GAAU7M,gBAAgBrD,MAG9B,IAAImQ,GAAqB,SAAS5F,GAC9B,MAAI2F,KAAY,GACZnC,WAAW,WACPpN,KAAK+C,iBACL6G,EAAKR,OAASpB,SAASyH,OACvBxI,EAASyI,OACTzI,EAASnD,SACV,IACI,IAEPyL,EAAU7M,gBAAgBrD,QACnB,GAyPf,OAnPA4H,GAASwC,KAAK,QAAS,SAAUmC,GAC7B,MAAO,UAASrC,EAAIoG,GAChBlP,OAAO+I,MAAM,yBACb/I,OAAO+I,MAAM,QAASmG,EACtB,IAAIC,GAAS,EACb,IAAIhG,GAAO+F,EAAI/F,IACf,IAAIA,EAAM,CACN,OAAQ+F,EAAI9N,MACR,IAAKmG,UAAS6H,OACVD,EAAS,oEACT,MACJ,KAAK5H,UAAS8H,gBACV,GAAI/B,GAAgBxE,EAAG2B,WAAa3B,EAAG2B,UAAU,gBACjD6C,GAAgBA,GAAkBxE,EAAG4B,UAAY5B,EAAG4B,SAAS4C,cAC7D6B,EAAS,mDAAa7B,EAAgB,sFACtC,MACJ,KAAK/F,UAAS+H,qBACVH,EAAS,gFACT,MACJ,KAAK5H,UAASgI,WACV,GAAqB,KAAjBL,EAAIN,SAAiB,CAGrB,GADAO,EAASD,EAAIM,SAAW,8CACnBT,EAAmB5F,GACpB,MAEJ,OAEJ,GAAIsG,GAAWlQ,KAAKiG,UAAU0J,EAAIN,SAClC,IAAIc,GAAYD,EAAS1G,KACzB,QAAQmG,EAAIvG,QACR,IAAK,KACDwG,EAAS,wDACT,MACJ,KAAK,KACDA,EAAS,oHACT,MACJ,KAAK,KACDA,EAAS,wGACT,MACJ,KAAK,KACDA,EAAS,gFACT,MACJ,KAAK,KAED,GADAA,EAAS,oGACJJ,EAAmB5F,GACpB,MAEJ,MACJ,KAAK,KACDgG,EAAS,sCACT,KACIM,EAAWlQ,KAAKiG,UAAUiK,EAAS1G,OACnC2G,EAAYD,EAAS1G,OAAS,cAChC,MAAO4G,GACLD,EAAYD,EAAS1G,OAAS,cAElC,KACJ,KAAK,KACDoG,EAAS,kDACT,MACJ,KAAK,KACDA,EAAS,oHACT,MACJ,SAEI,GADAA,EAAS,kCACJJ,EAAmB5F,GACpB,OAIZgG,EAASA,EAAS,IAAMD,EAAIvG,OAAS,SAAM+G,EAAY,GACvD,MACJ,KAAKnI,UAASqI,eACVT,EAAS,kGACT,MACJ,KAAK5H,UAASsI,cACVV,EAAS,oEACT,MACJ,KAAK5H,UAASuI,SACVX,EAAS,oEACT,MACJ,KAAK5H,UAASwI,WACVZ,EAAS,mGACT3I,EAASwJ,SACT,MACJ,SAEI,GADAb,EAASD,EAAIM,QAAUN,EAAIe,SACtBlB,EAAmB5F,GACpB,OAIRgC,GACAA,EAAerC,EAAIoG,EAAKC,GAGhCrG,EAAG8D,YAERzB,IAEHnL,OAAOwC,MAAM,oBAMbgE,EAASwC,KAAK,eAAgB,SAAUsC,GACpC,MAAO,UAASxC,EAAIK,EAAMwF,GACtB3O,OAAOwC,MAAM,gCACbxC,OAAOwC,MAAM,SAAU2G,GACvBnJ,OAAOwC,MAAM,SAAUmM,EACvB,IAAIuB,GAAY,SAASpH,EAAIK,EAAMwF,GAC/B,GAAIlI,EAAG0J,cAAe,CAGlB,GAAIC,GAAiB7Q,KAAK4F,YAC1BiL,GAAe5H,KAAK,OAAQ/B,EAAG0J,eAAe,GAC9CC,EAAe3G,iBAAiB,eAAgB,qCAChD2G,EAAe3H,mBAAqB,WAChC,GAAkC,IAA9B2H,EAAe1H,WACf,GAA8B,MAA1B0H,EAAezH,OAAgB,CAC/B,GAAI0H,EACJ,KACIA,EAAgB9Q,KAAKiG,UAAU4K,EAAevH,cAChD,MAAO8G,GACL,KAAM,sBAEV,GAAIW,KACJ/I,UAAS4E,OAAOmE,EAAe/Q,KAAKiG,UAAUmJ,GAAO0B,GACjD/E,GACAA,EAAsBxC,EAAIK,EAAM5J,KAAKuB,cAAcwP,QAGvD9J,GAAS+J,QAAQ,SACb5H,OAAQyH,EAAezH,OACvBiG,SAAUwB,EAAevH,aACzBM,KAAMA,EACN/H,KAAMmG,SAASgI,cAK/Ba,EAAenH,KAAK,OAAS1J,KAAKiG,UAAUmJ,GAAMhR,IAAM,WAAa8I,EAAGqE,YACjEQ,IACPA,EAAsBxC,EAAIK,EAAMwF,GAIxC,IAAI/F,GAAMrJ,KAAKiG,UAAUmJ,EAAKC,SAS9B,IARAlD,EAAMA,EAAMA,EAAM9C,EAAI8C,IAOtB1L,OAAOwC,MAAM,QAASkJ,GAClBA,EAAK,CACL,GAAI/N,GAAM,EACVqC,QAAOwC,MAAM,aAAciE,EAAG+D,UACzB/D,EAAG+D,WACJ7M,EAAM2M,EAAWxB,EAAIK,EAAM5J,KAAKiM,aAChC7N,EAAMA,EAAM,QAAU4B,KAAKyF,oBAAoBrH,GAAO,GAG1D,IAAI6S,GAAQ,UAAYjR,KAAKyF,oBAAoBmE,EAAKwB,KAEtD3K,QAAOwC,MAAM,cAAeiE,EAAGuG,OAC/B,IAAIA,GAASvG,EAAGuG,OACZyD,EAAQ,GACRC,EAAa,EACjB,IAAezD,SAAXD,GAA0C,gBAAXA,GAC/B,IAAK,GAAIE,KAASF,GACVA,EAAOnL,eAAeqL,KACO,kBAAlBF,GAAOE,GACduD,EAAQlR,KAAKyF,oBAAoBgI,EAAOE,GAAOpE,EAAIK,IACnB,gBAAlB6D,GAAOE,KACrBuD,EAAQlR,KAAKyF,oBAAoBgI,EAAOE,KAE5CwD,GAAc,MAAQxD,EAAQ,IAAMuD,EAKhD,IAAI/N,GAAMZ,eAAiB,WAAaqH,EAAKuE,KAAO/P,EAAM6S,EAAQE,CAElE,IAAI/J,GAAKpH,KAAKE,iBACd,IAAI4I,EACA1B,IAAY,GAANA,GACN0B,EAAO,GAAIrB,OAAM1B,eACjB0B,MAAMC,IAAIqB,QAAU7B,EAAG8B,eAEvBF,EAAO9I,KAAK4F,aAEhBkD,EAAKG,KAAK,OAAQ9F,GAAK,GACvB2F,EAAKoB,iBAAiB,eAAgB,4BACtCpB,EAAKoB,iBAAiB,gBAAiB,WAAalK,KAAK6J,MACzD,IAAIX,GAAqB,WAErB,GADAzI,OAAOwC,MAAM,oBAAqB6F,EAAKK,YACf,IAApBL,EAAKK,WAAkB,CACvBxJ,aAAaG,WAAW8J,EAAKwB,KAC7B,IAAIgE,EACgB,OAAhBtG,EAAKM,QACLgG,EAAOtG,EAAKQ,aACZ7I,OAAOwC,MAAM,sBAAuBmM,GACpCuB,EAAUpH,EAAIK,EAAMwF,KAEpBA,GACIhG,OAAQN,EAAKM,OACbiG,SAAUvG,EAAKQ,aACfM,KAAMA,EACN/H,KAAM,KACNuP,gBAAiBtI,EAAKuI,yBAE1B5Q,OAAOwC,MAAM,oBAAqBmM,GAClCnI,EAAS+J,QAAQ,QAAS5B,KAIlChI,IAAY,GAANA,EACN0B,EAAKW,KAAK,mBAAoBP,GAE9BJ,EAAKI,mBAAqBA,EAE9BJ,EAAKY,KAAKyC,GACV1L,OAAOwC,MAAM,WAAYE,OAEzBwN,GAAUpH,EAAIK,EAAMwF,EAAKC,YAIlCtD,IAEHtL,OAAOwC,MAAM,2BAGbgE,EAAS4E,OAETpL,OAAOwC,MAAM,0BAEbxC,OAAOwC,MAAM,qBAENgE,GAQXhH,KAAKqR,OAAS,SAASlT,GACnB,IAAKA,EACD,OAAO,CAEXA,GAAMmT,UAAUnT,EAChB,IAAImN,GAAStL,KAAKsL,MAIlB,OAHwC,MAApCA,EAAOrJ,MAAMqJ,EAAOlM,OAAS,KAC7BkM,GAAkB,KAEfA,EAASnN,GASpB6B,KAAKuR,WAAa,SAAStK,EAAI9I,GAE3B,IAAK,OAAOgF,KAAK8D,EAAGuK,MAChB,OAAO,CAGX,IAAIA,GAAOvK,EAAGuK,KACVC,EAAIxK,EAAGwK,GAAK,GACZC,EAAIzK,EAAGyK,GAAK,GACZC,EAAI1K,EAAG0K,GAAK,GACZC,EAAS3K,EAAG2K,QAAU,EAE1B,KAAKH,IAAMC,EACP,OAAO,CAGX,IAAIG,GAAW,cAAgBL,CAQ/B,OAPAK,IAAYJ,EAAI,MAAQA,EAAI,GAC5BI,GAAYH,EAAI,MAAQA,EAAI,GAC5BG,GAAYF,EAAI,MAAQA,EAAI,GAC5BE,GAAYD,EAAS,WAAaA,EAAS,GACvCzT,IACA0T,EAAW7R,KAAKqR,OAAOlT,GAAO,IAAM0T,GAEjCA,GASX7R,KAAK8R,WAAa,SAAS7K,EAAI9I,GAC3B,GAAI4T,GAAc9K,EAAG,gBAAkB,GACnC+K,EAAY/K,EAAG+K,WAAa,GAC5BC,EAAQhL,EAAGgL,OAAS,GACpBC,EAAUjL,EAAGiL,SAAW,GACxBC,EAAOlL,EAAGkL,MAAQ,GAClBC,EAAUnL,EAAGmL,SAAW,GACxBC,EAASpL,EAAGoL,QAAU,GACtBT,EAAS3K,EAAG2K,QAAU,GACtBU,EAAOrL,EAAGqL,MAAQ,EAGtB,IAAIT,GAAW,YAef,OAbAA,IAAYE,EAAc,eAAiB,GAC3CF,GAAYG,EAAY,cAAgBA,EAAY,GACpDH,GAAYI,EAAQ,SAAW,GAC/BJ,GAAYK,EAAU,YAAcA,EAAU,GAC9CL,GAAYO,EAAU,YAAcA,EAAU,GAC9CP,GAAYM,EAAO,SAAWA,EAAO,GACrCN,GAAYQ,EAAS,WAAaA,EAAS,GAC3CR,GAAYD,EAAS,WAAaA,EAAS,GAC3CC,GAAYS,EAAO,SAAWA,EAAO,GAEjCnU,IACA0T,EAAW7R,KAAKqR,OAAOlT,GAAO,IAAM0T,GAEjCA,GASX7R,KAAKuS,UAAY,SAAStL,EAAI9I,GAC1B,GAAIqT,GAAOvK,EAAGuK,IACd,KAAKA,EACD,OAAO,CAGX,IAAIK,GAAW,aAAeL,CAE9B,IAAa,IAATA,EAAY,CACZ,GAAIgB,GAAQvL,EAAGuL,OAAS,EACxB,KAAKA,EACD,OAAO,CAEXX,IAAYW,EAAQ,UAAYxS,KAAKwF,oBAAoBgN,GAAS,OAC/D,CAAA,GAAa,IAAThB,EAcP,OAAO,CAbP,IAAIpL,GAAOa,EAAGb,KAAOa,EAAGb,KAAO,GAC3BqM,EAAOxL,EAAGwL,KAAOxL,EAAGwL,KAAO,GAC3BC,EAAWzL,EAAGyL,SAAWzL,EAAGyL,SAAW,GACvCC,EAAO1L,EAAG0L,KAAO1L,EAAG0L,KAAO,EAC/B,KAAKvM,EACD,OAAO,CAEXyL,IAAYzL,EAAO,SAAWpG,KAAKwF,oBAAoBY,GAAQ,GAC/DyL,GAAYY,EAAO,SAAWzS,KAAKwF,oBAAoBiN,GAAQ,GAC/DZ,GAAYa,EAAW,aAAeA,EAAW,GACjDb,GAAYc,EAAO,SAAW3S,KAAKwF,oBAAoBmN,GAAQ,GAMnE,GAAIC,GAAW3L,EAAG2L,UAAY,GAC1BV,EAAUjL,EAAGiL,SAAW,GACxBW,EAAK5L,EAAG4L,IAAM,GACdC,EAAK7L,EAAG6L,IAAM,EAUlB,OARAjB,IAAYe,EAAW,aAAeA,EAAW,GACjDf,GAAYK,EAAU,YAAcA,EAAU,GAC9CL,GAAYgB,EAAK,OAASA,EAAK,GAC/BhB,GAAYiB,EAAK,OAASA,EAAK,GAE3B3U,IACA0T,EAAW7R,KAAKqR,OAAOlT,GAAO,IAAM0T,GAEjCA,GAQX7R,KAAK+S,UAAY,SAAS5U,GACtB,IAAKA,EACD,OAAO,CAEX,IAAI+E,GAAMlD,KAAKqR,OAAOlT,GAAO,YAC7B,IAAI6U,GAAMhT,KAAK2F,YACf,IAAIwJ,EACJ,IAAIpP,GAAOC,IAQX,OAPAgT,GAAIhK,KAAK,MAAO9F,GAAK,GACrB8P,EAAI/J,mBAAqB,WACE,IAAnB+J,EAAI9J,YAAmC,MAAf8J,EAAI7J,SAC5BgG,EAAOpP,EAAKiG,UAAUgN,EAAI3J,gBAGlC2J,EAAIvJ,OACG0F,GAQXnP,KAAKiT,KAAO,SAAS9U,GACjB,IAAKA,EACD,OAAO,CAEX,IAAI+E,GAAMlD,KAAKqR,OAAOlT,GAAO,OAC7B,IAAI6U,GAAMhT,KAAK2F,YACf,IAAIwJ,EACJ,IAAIpP,GAAOC,IAQX,OAPAgT,GAAIhK,KAAK,MAAO9F,GAAK,GACrB8P,EAAI/J,mBAAqB,WACE,IAAnB+J,EAAI9J,YAAmC,MAAf8J,EAAI7J,SAC5BgG,EAAOpP,EAAKiG,UAAUgN,EAAI3J,gBAGlC2J,EAAIvJ,OACG0F,GAUXnP,KAAKkT,IAAM,SAAShS,EAAM/C,GACtB,MAAKA,IAAQ+C,EAGA,SAATA,EACOlB,KAAKiT,KAAK9U,GACD,cAAT+C,EACAlB,KAAK+S,UAAU5U,IAEnB,GAPI,GAkBf6B,KAAKmT,SAAW,SAASC,EAAKjV,GAC1B,GAAIkV,GAAkD,mBAAxCC,OAAOtR,UAAUuE,SAASrE,KAAKkR,EAC7C,IAAI1H,GAAQ6H,EAAO1B,EAAW,EAC9B,IAAIwB,EAAS,CACT,IAAK,GAAInU,GAAI,EAAG2H,EAAMuM,EAAIhU,OAAYyH,EAAJ3H,EAASA,IAAK,CAE5C,GADAwM,EAAS0H,EAAIlU,IACRwM,EAAO8H,IACR,OAAO,CAEX,QAAQ9H,EAAO8H,KACX,IAAK,YACD3B,GAAY7R,KAAKuS,UAAU7G,GAAU,GACrC,MACJ,KAAK,aACDmG,GAAY7R,KAAKuR,WAAW7F,GAAU,GACtC,MACJ,KAAK,aACDmG,GAAY7R,KAAK8R,WAAWpG,GAAU,GACtC,MACJ,SACI6H,GAAQ,EAGhB,GAAIA,EACA,OAAO,EAGf,GAAIpV,EAAK,CACL0T,EAAW7R,KAAKqR,OAAOlT,GAAO,IAAM0T,CACpC,IAAIzS,GAASyS,EAASzS,MACa,OAA/ByS,EAAS5P,MAAM7C,EAAS,KACxByS,EAAWA,EAAS5P,MAAM,EAAG7C,EAAS,IAG9C,MAAOyS,GAEX,OAAO,GAIf,GAAI4B,OAAQ,GAAI3T,WAEhB7B,QAAOwV,MAAQA,MAEfxV,OAAO6B,WAAaA,YAEhBL"} \ No newline at end of file diff --git a/package.json b/package.json index f3cf63ce..1408b013 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qiniu-js", "jsName": "qiniu", - "version": "1.0.17.1", + "version": "1.0.18", "private": false, "scripts": { "start": "node demo/server.js" diff --git a/src/qiniu.js b/src/qiniu.js index 43bdb70b..be64e414 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1393,14 +1393,17 @@ function QiniuJsSDK() { * @return {String} url of processed image */ this.imageView2 = function(op, key) { - var mode = op.mode || '', + + if (!/^\d$/.test(op.mode)) { + return false; + } + + var mode = op.mode, w = op.w || '', h = op.h || '', q = op.q || '', format = op.format || ''; - if (!mode) { - return false; - } + if (!w && !h) { return false; } From bb050e02b8e05be1879258d0d9ecf84ef716be67 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Tue, 7 Feb 2017 17:19:59 +0800 Subject: [PATCH 02/44] modify error urls in readme.md --- README.md | 48 +++++++++++++++++++++++++----------------------- package.json | 4 ++++ 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index e6a6f4e0..bb112e77 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,18 @@ Qiniu-JavaScript-SDK (下文简称为 JS-SDK)适用于 IE8+、Chrome、Firef Qiniu-JavaScript-SDK 为客户端 SDK,没有包含 token 生成实现,为了安全,token 建议通过网络从服务端获取,具体生成代码可以参考以下服务端 SDK 的文档。 -- [Java](http://developer.qiniu.com/code/v7/sdk/android.html) -- [PHP](http://developer.qiniu.com/code/v7/sdk/php.html) -- [Python](http://developer.qiniu.com/code/v7/sdk/python.html) -- [Ruby](http://developer.qiniu.com/code/v6/sdk/ruby.html) -- [Go](http://developer.qiniu.com/code/v7/sdk/go.html) -- [Node.js](http://developer.qiniu.com/code/v6/sdk/nodejs.html) -- [C#](http://developer.qiniu.com/code/v6/sdk/csharp.html) -- [C/C++](http://developer.qiniu.com/code/v6/sdk/cpp.html) - -Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js 服务器端 SDK ](http://developer.qiniu.com/code/v6/sdk/nodejs.html) 开发的。 +- [Android](https://developer.qiniu.com/kodo/sdk/android) +- [Java](https://developer.qiniu.com/kodo/sdk/java) +- [PHP](https://developer.qiniu.com/kodo/sdk/php) +- [Python](https://developer.qiniu.com/kodo/sdk/python) +- [Ruby](https://developer.qiniu.com/kodo/sdk/ruby) +- [Go](https://developer.qiniu.com/kodo/sdk/go) +- [Node.js](https://developer.qiniu.com/kodo/sdk/nodejs) +- [C#](https://developer.qiniu.com/kodo/sdk/csharp) +- [C/C++](https://developer.qiniu.com/kodo/sdk/cpp) +- [Objective-C](https://developer.qiniu.com/kodo/sdk/objc) + +Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js 服务器端 SDK ](https://developer.qiniu.com/kodo/sdk/nodejs) 开发的。 +
{{loadMessage}}
+
+ + +
+ + + + + + + \ No newline at end of file From 419108ba35b717f99e65284ab5c89fc262a7bbb1 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Mon, 13 Mar 2017 18:25:49 +0800 Subject: [PATCH 04/44] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E8=AE=BE=E7=BD=AEge?= =?UTF-8?q?t=5Fnew=5Fuptoken=E4=B8=BAtrue=E6=97=B6=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=9D=9E=E5=8D=8E=E4=B8=9C=E6=9C=BA=E6=88=BF=E7=9A=84=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/qiniu.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index be64e414..cace4f80 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -624,7 +624,7 @@ function QiniuJsSDK() { }else{ ajax = that.createAjax(); } - ajax.open('GET', uphosts_url, true); + ajax.open('GET', uphosts_url, false); var onreadystatechange = function(){ logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { @@ -1393,7 +1393,7 @@ function QiniuJsSDK() { * @return {String} url of processed image */ this.imageView2 = function(op, key) { - + if (!/^\d$/.test(op.mode)) { return false; } From 0812d9b8c3e4242999aeb515be171f93ace4af30 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 15:27:33 +0800 Subject: [PATCH 05/44] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/scripts/http-performance.js | 2 +- demo/scripts/performance.js | 9 +++++++-- demo/server.js | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/demo/scripts/http-performance.js b/demo/scripts/http-performance.js index 42536766..823ee97c 100644 --- a/demo/scripts/http-performance.js +++ b/demo/scripts/http-performance.js @@ -57,4 +57,4 @@ } else { window.httpPerformance = httpPerformance; } -})(window); \ No newline at end of file +})(window); diff --git a/demo/scripts/performance.js b/demo/scripts/performance.js index 4139847d..b1b4d9df 100644 --- a/demo/scripts/performance.js +++ b/demo/scripts/performance.js @@ -17,7 +17,7 @@ Vue.component('upload-performance', { }); Vue.component('up-headers', { props: ['headers'], - template: '
响应头:
{{header.key}}{{header.val}}
' + template: '
响应头:
类型
{{header.key}}{{header.val}}
' }); Vue.filter('tofixed', function (val, size) { return val.toFixed(size); @@ -87,7 +87,7 @@ var app = new Vue({ post: function(opt) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open('POST', opt.url, true); - xmlHttp.setRequestHeader('Performance-Page', 'true'); + xmlHttp.setRequestHeader('X-Qiniu-Performance', 'true'); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { @@ -160,6 +160,11 @@ var app = new Vue({ }, getPerformance: function() { var per = httpPerformance.getByName(this.selectedHost.host + '/'); + if(per.length == 2) { + per[1].redirect = per[0].redirect; + per[1].domainLookup = per[0].domainLookup; + per[1].connect = per[0].connect; + } this.performance = per[1] || per[0]; // 跨域有时候会先发送一个 option 请求,并不是真的上传请求。 }, formateHeader: function(headers) { diff --git a/demo/server.js b/demo/server.js index 1beb8a01..6e8d46e6 100644 --- a/demo/server.js +++ b/demo/server.js @@ -102,5 +102,6 @@ app.listen(config.Port, function() { console.log(' ▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹ Upload: http://127.0.0.1:%d ◁ ◁ ◁ ◁ ◁ ◁ ◁', config.Port); console.log(' ▹▹▹▹▹▹▹ Multiple upload: http://127.0.0.1:%d/multiple ◁ ◁ ◁', config.Port); console.log(' ▹▹▹▹▹▹▹ Formdata upload: http://127.0.0.1:%d/formdata ◁ ◁ ◁', config.Port); + console.log(' ▹▹▹▹▹▹▹ Up Performance: http://127.0.0.1:%d/performance ◁ ◁', config.Port); console.log('△ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △\n'); }); From a25d8bb0b71ea503cd1e9cd267e38eca3aa1bd79 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 15:31:08 +0800 Subject: [PATCH 06/44] modify version --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 930c3780..351f7951 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "qiniu", "description": "Javascript SDK for Qiniu Resource (Cloud) Storage API", - "version": "v1.0.18", + "version": "v1.0.19", "main": "dist/qiniu.js", "moduleType": [ "globals" diff --git a/package.json b/package.json index a4281c79..ee4a26e6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qiniu-js", "jsName": "qiniu", - "version": "1.0.18", + "version": "1.0.19", "private": false, "scripts": { "start": "node demo/server.js" From 9d4bd09cd0f36cca0163419865c05ac035a275c1 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 15:46:11 +0800 Subject: [PATCH 07/44] build --- dist/qiniu.js | 8 ++++---- dist/qiniu.min.js | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 24f5fa84..e1d80559 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -1,12 +1,12 @@ /*! - * qiniu-js-sdk v1.0.18 + * qiniu-js-sdk v1.0.19 * * Copyright 2015 by Qiniu * Released under GPL V2 License. * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-2-6 + * Date: 2017-3-15 */ /*global plupload ,mOxie*/ @@ -624,7 +624,7 @@ function QiniuJsSDK() { }else{ ajax = that.createAjax(); } - ajax.open('GET', uphosts_url, true); + ajax.open('GET', uphosts_url, false); var onreadystatechange = function(){ logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { @@ -1393,7 +1393,7 @@ function QiniuJsSDK() { * @return {String} url of processed image */ this.imageView2 = function(op, key) { - + if (!/^\d$/.test(op.mode)) { return false; } diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 65434a5e..15b65081 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ -/*! qiniu-js v1.0.18 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=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))};var c=function(a){var b=[];for(var c=0;c=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!0);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===mOxie.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=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 i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("file: ",b),logger.debug("info: ",c);var d=that.parseJSON(c.response);logger.debug("res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("file: ",d),logger.debug("info: ",e);var f=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,that.stringifyJSON(h))}else p.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 g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a=s.responseText,logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e.response)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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); +/*! qiniu-js v1.0.19 | Copyright 2015 by Qiniu */ +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=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))};var c=function(a){var b=[];for(var c=0;c=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===mOxie.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=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 i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("file: ",b),logger.debug("info: ",c);var d=that.parseJSON(c.response);logger.debug("res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("file: ",d),logger.debug("info: ",e);var f=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,that.stringifyJSON(h))}else p.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 g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a=s.responseText,logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e.response)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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 From 8263d7c3b96afaa67417813b9b114d4a8c7c797d Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 16:18:12 +0800 Subject: [PATCH 08/44] modify gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a37385d1..35c68c80 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ node_modules bower_components demo/config.js -demo/deploy.sh +deploy.sh From 1d88e94bcdeb5294386c7bee776c9bc31012e3eb Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 16:26:04 +0800 Subject: [PATCH 09/44] MIT --- README.md | 6 ++---- bower.json | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8b3a1ab0..e2d6ac62 100644 --- a/README.md +++ b/README.md @@ -830,8 +830,6 @@ $(function() { ### 许可证 -> Copyright (c) 2014 qiniu.com +> Copyright (c) 2017 qiniu.com -### 基于 GPL V2 协议发布: - -> [www.gnu.org/licenses/gpl-2.0.html](http://www.gnu.org/licenses/gpl-2.0.html) +### 基于 MIT 协议发布 diff --git a/bower.json b/bower.json index 351f7951..eeb3eebd 100644 --- a/bower.json +++ b/bower.json @@ -6,7 +6,7 @@ "moduleType": [ "globals" ], - "license": "GPL V2", + "license": "MIT", "ignore": [ "**/.*", "node_modules", From df17b844c35881f5540893b465dc992f307abd11 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 15 Mar 2017 16:28:21 +0800 Subject: [PATCH 10/44] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8=E7=89=88=E6=9C=AC=E8=BF=87=E4=BD=8E=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/views/performance.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/demo/views/performance.html b/demo/views/performance.html index 2d1ca884..1e332071 100644 --- a/demo/views/performance.html +++ b/demo/views/performance.html @@ -14,12 +14,12 @@ - - - + + +
- + 开始检测
{{loadMessage}}
@@ -33,4 +33,4 @@ - \ No newline at end of file + From 154ef6eb8e0226d382833c0c25f6fb5fc1261986 Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Mon, 20 Mar 2017 15:51:07 +0800 Subject: [PATCH 11/44] =?UTF-8?q?=E4=BC=98=E5=8C=96performance=20demo?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/scripts/http-performance.js | 7 ++- demo/scripts/performance.js | 99 +++++++++++++++++++++++++------- demo/styles/performance.css | 8 ++- demo/views/performance.html | 18 +++--- 4 files changed, 93 insertions(+), 39 deletions(-) diff --git a/demo/scripts/http-performance.js b/demo/scripts/http-performance.js index 823ee97c..06a8c301 100644 --- a/demo/scripts/http-performance.js +++ b/demo/scripts/http-performance.js @@ -13,9 +13,10 @@ var p = window.performance; var httpPerformance = { clear: function() { - p.clearMarks(); - p.clearMeasures(); - p.clearResourceTimings(); + + p.clearMarks && p.clearMarks(); + p.clearMeasures && p.clearMeasures(); + p.clearResourceTimings && p.clearResourceTimings(); }, getAll: function() { var performanceArr = []; diff --git a/demo/scripts/performance.js b/demo/scripts/performance.js index b1b4d9df..267893d4 100644 --- a/demo/scripts/performance.js +++ b/demo/scripts/performance.js @@ -3,16 +3,16 @@ Vue.component('zone-list', { template: '
  • {{item.zoneZh}}
' }); Vue.component('upload-performance', { - props: ['per'], - template: '
上传耗时:
' + + props: ['per', 'warning'], + template: '
上传耗时:您好,请使用谷歌、IE9+等高级浏览器获取更详细的数据!
' + '' + '' + - '' + - '' + - '' + - '' + - '' + - '
类型耗时 / ms
重定向:{{per.redirect | tofixed(2)}}
DNS 查询:{{per.domainLookup | tofixed(2)}}
建立连接:{{per.connect | tofixed(2)}}
发送数据到开始响应:{{per.request | tofixed(2)}}
接收响应:{{per.response | tofixed(2)}}
总耗时:{{per.duration | tofixed(2)}}
' + + '重定向:{{per.redirect | tofixed(2)}}' + + 'DNS 查询:{{per.domainLookup | tofixed(2)}}' + + '建立连接:{{per.connect | tofixed(2)}}' + + '发送数据:{{per.request | tofixed(2)}}' + + '接收响应:{{per.response | tofixed(2)}}' + + '总耗时:{{per.duration | tofixed(2)}}' + '
' }); Vue.component('up-headers', { @@ -36,7 +36,7 @@ var app = new Vue({ { zone: 'z0', zoneZh: '华东', - token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:hzD116IsDOpb4gjzyPg7ngg4Qjs=:eyJzY29wZSI6Impzc2RrOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', + token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:ImkQNYuzXd7mj_MJ-Ez3f0ojFhs=:eyJzY29wZSI6Impzc2RrOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAsImZzaXplTWluIjo4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', uphosts: [ 'http://up.qiniu.com', 'http://upload.qiniu.com', @@ -47,7 +47,7 @@ var app = new Vue({ { zone: 'z1', zoneZh: '华北', - token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:9RFuA13c6pp-O2aIOe1UfTI3rlo=:eyJzY29wZSI6Impzc2RrLXoxOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', + token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:mU26SwShCB0I-B1yCsO9-3bK82g=:eyJzY29wZSI6Impzc2RrLXoxOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAsImZzaXplTWluIjo4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', uphosts: [ 'http://up-z1.qiniu.com', 'http://upload-z1.qiniu.com', @@ -58,7 +58,7 @@ var app = new Vue({ { zone: 'z2', zoneZh: '华南', - token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:qmDBxiYviu0tg2hZzCFHjCZM3-w=:eyJzY29wZSI6Impzc2RrLXoyOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', + token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:iEkyIA0yoFKYS-SAihuyR3jPo50=:eyJzY29wZSI6Impzc2RrLXoyOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAsImZzaXplTWluIjo4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9', uphosts: [ 'http://up-z2.qiniu.com', 'http://upload-z2.qiniu.com', @@ -69,7 +69,7 @@ var app = new Vue({ { zone: 'na0', zoneZh: '北美', - token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:DMPzTGGhX3HY0ph99YfAK_y-0XM=:eyJzY29wZSI6Impzc2RrLW5hMDphLmpwZyIsImRlYWRsaW5lIjoyMTE0MzgwODAwMDAwLCJmc2l6ZUxpbWl0IjoxMDAwMDAwfQ==', + token: 'xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:4iTbAdFUN_fV0IQdN5vJReR9fx0=:eyJzY29wZSI6Impzc2RrLW5hMDphLmpwZyIsImRlYWRsaW5lIjoyMTE0MzgwODAwLCJmc2l6ZU1pbiI6ODAwMDAwLCJmc2l6ZUxpbWl0IjoxMDAwMDAwfQ==', uphosts: [ 'http://up-na0.qiniu.com', 'http://upload-na0.qiniu.com', @@ -80,7 +80,9 @@ var app = new Vue({ ], isPerformanceSupported: true, performance: null, - headers: null + headers: null, + timetags: {}, + totalBytes: 0 }, methods: { renderHtml: function() {}, @@ -88,22 +90,30 @@ var app = new Vue({ var xmlHttp = new XMLHttpRequest(); xmlHttp.open('POST', opt.url, true); xmlHttp.setRequestHeader('X-Qiniu-Performance', 'true'); + if (opt.headers) { + for (var k in opt.headers) { + xmlHttp.setRequestHeader(k, opt.headers[k]); + } + } xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { - opt.success(xmlHttp); + opt.success && opt.success(xmlHttp); } else { - opt.error(xmlHttp.responseText); + opt.error && opt.error(xmlHttp.responseText); } + opt.finally && opt.finally(xmlHttp.status, xmlHttp); } }; xmlHttp.upload.onprogress = opt.progress; + this.timetags.beginAjax = + new Date(); xmlHttp.send(opt.data); }, uploadTest: function() { if(!this.selectedHost.host) return; this.resetResult(); var self = this; + httpPerformance.clear(); this.post({ url: this.selectedHost.host, data: this.mockDate(), @@ -111,14 +121,22 @@ var app = new Vue({ if (e.lengthComputable) { var percent = e.loaded/e.total*100; self.loadMessage = '模拟数据上传:' + e.loaded + " / " + e.total+" bytes 完成:" + percent.toFixed(2) + "%"; + if (percent === 100) { + self.timetags.afterUpload = + new Date(); + self.totalBytes = e.total; + } } }, success: function(xhr) { self.formateHeader(xhr.getAllResponseHeaders()); - self.getPerformance(); }, error: function(res) { self.loadMessage = '上传失败:' + res; + }, + finally: function(code, xhr) { + self.timetags.afterAjax = + new Date(); + self.getPerformance(); + self.formateLog(code, xhr); } }); }, @@ -153,19 +171,28 @@ var app = new Vue({ } this.performance = null; this.headers = null; + this.timetags = {}; }, switchZone: function(zone) { this.currentZone = zone; this.selectedHost.host = ''; }, getPerformance: function() { - var per = httpPerformance.getByName(this.selectedHost.host + '/'); - if(per.length == 2) { - per[1].redirect = per[0].redirect; - per[1].domainLookup = per[0].domainLookup; - per[1].connect = per[0].connect; + if (this.isPerformanceSupported) { + var per = httpPerformance.getByName(this.selectedHost.host + '/'); + if(per.length == 2) { + per[1].redirect = per[0].redirect; + per[1].domainLookup = per[0].domainLookup; + per[1].connect = per[0].connect; + } + this.performance = per[1] || per[0]; // 跨域有时候会先发送一个 option 请求,并不是真的上传请求。 + } else { + this.performance = { + request: this.timetags.afterUpload - this.timetags.beginAjax, + response: this.timetags.afterAjax - this.timetags.afterUpload, + duration: this.timetags.afterAjax - this.timetags.beginAjax + }; } - this.performance = per[1] || per[0]; // 跨域有时候会先发送一个 option 请求,并不是真的上传请求。 }, formateHeader: function(headers) { var list = []; @@ -178,6 +205,34 @@ var app = new Vue({ list.push(o); }); this.headers = list; + }, + formateLog: function(code, xhr) { + // status_code,req_id,host,remote_ip,port,duration,up_time,bytes_sent,up_type + headers = xhr.getAllResponseHeaders(); + var req_id = headers.match(/X-Reqid:\s*(\w+)/); + if (req_id && req_id.length === 2) req_id = req_id[1]; + var host = this.selectedHost.host; + var port = 80; + if (host) { + if (host.indexOf('https') > -1) port = 443; + host = host.split('//')[1]; + } + remote_ip = headers.match(/X-Forwarded-For:[^,]+,\s*([^,]+)/); + if (remote_ip && remote_ip.length === 2) remote_ip = remote_ip[1]; + var duration = this.performance.duration.toFixed(2); + var up_time = this.timetags.beginAjax.toString().slice(0,-3); + var bytes_sent = this.totalBytes; + var log = [code, req_id, host, remote_ip, port, duration, up_time, bytes_sent, 'jsperf']; + this.sendLog(log); + }, + sendLog: function(log) { + this.post({ + url: 'https://uplog.qbox.me/log/2', + data: log.join(','), + headers: { + 'Authorization': 'UpToken xozWSPMxkMjIVoHg2JyXq4-7-oJaEADLOKHVR0vU:iEkyIA0yoFKYS-SAihuyR3jPo50=:eyJzY29wZSI6Impzc2RrLXoyOmEuanBnIiwiZGVhZGxpbmUiOjIxMTQzODA4MDAsImZzaXplTWluIjo4MDAwMDAsImZzaXplTGltaXQiOjEwMDAwMDB9' + } + }); } }, created: function() { diff --git a/demo/styles/performance.css b/demo/styles/performance.css index 8de42543..92e5f42e 100644 --- a/demo/styles/performance.css +++ b/demo/styles/performance.css @@ -58,8 +58,10 @@ td, th{ color: #108ee9; line-height: 26px; } -.low-browser{ - padding: 30px 20px; +.warning{ + color: #f0ad4e; + font-weight: normal; + font-size: 12px; } .run{ display: block; @@ -124,7 +126,7 @@ td, th{ color: #108ee9; } .up-headers{ - + } .up-headers tr td:first-child{ width: 120px; diff --git a/demo/views/performance.html b/demo/views/performance.html index 1e332071..3f94fa31 100644 --- a/demo/views/performance.html +++ b/demo/views/performance.html @@ -15,18 +15,14 @@ - + -
- - - 开始检测 - -
{{loadMessage}}
-
- - -
+ 开始检测 + +
{{loadMessage}}
+
+ +
From bf21eab7c2a4356cebb8eb09592c444e405955b5 Mon Sep 17 00:00:00 2001 From: Jemy Date: Wed, 22 Mar 2017 22:09:47 +0800 Subject: [PATCH 12/44] 1. make the file uploaded response info consistent with plupload, which is of the struct of response, response header and status code 2. make the js sdk to use cdn upload domain first --- demo/scripts/ui.js | 2 +- src/qiniu.js | 50 +++++++++++++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/demo/scripts/ui.js b/demo/scripts/ui.js index 202d26ed..ad07f39c 100644 --- a/demo/scripts/ui.js +++ b/demo/scripts/ui.js @@ -191,7 +191,7 @@ FileProgress.prototype.setComplete = function(up, info) { var td = this.fileProgressWrapper.find('td:eq(2)'), tdProgress = td.find('.progress'); - var res = $.parseJSON(info); + var res = $.parseJSON(info.response); var url; if (res.url) { url = res.url; diff --git a/src/qiniu.js b/src/qiniu.js index cace4f80..664f8610 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -584,14 +584,25 @@ function QiniuJsSDK() { var getHosts = function(hosts) { var result = []; + var uploadIndex=-1; for (var i = 0; i < hosts.length; i++) { var host = hosts[i]; + if(host.indexOf("upload")!=-1) { + uploadIndex=i; + } if (host.indexOf('-H') === 0) { result.push(host.split(' ')[2]); } else { result.push(host); } } + + if (uploadIndex!=-1) { + //make upload domains first + var uploadDomain=result[uploadIndex]; + result[uploadIndex]=result[0]; + result[0]=uploadDomain; + } return result; }; @@ -612,7 +623,7 @@ function QiniuJsSDK() { var getUpHosts = function(uptoken) { var putPolicy = getPutPolicy(uptoken); // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; - // IE 9- is not support protocal relative url + // IE9 does not support protocol relative url var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; logger.debug("putPolicy: ", putPolicy); logger.debug("get uphosts from: ", uphosts_url); @@ -1072,10 +1083,10 @@ function QiniuJsSDK() { // store the chunk upload info and set next chunk upload url uploader.bind('ChunkUploaded', function(up, file, info) { logger.debug("ChunkUploaded event activated"); - logger.debug("file: ", file); - logger.debug("info: ", info); + logger.debug("ChunkUploaded file: ", file); + logger.debug("ChunkUploaded info: ", info); var res = that.parseJSON(info.response); - logger.debug("res: ", res); + logger.debug("ChunkUploaded res: ", res); // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' ctx = ctx ? ctx + ',' + res.ctx : res.ctx; var leftSize = info.total - info.offset; @@ -1233,9 +1244,10 @@ function QiniuJsSDK() { uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { logger.debug("FileUploaded event activated"); - logger.debug("file: ", file); - logger.debug("info: ", info); + logger.debug("FileUploaded file: ", file); + logger.debug("FileUploaded info: ", info); var last_step = function(up, file, info) { + logger.debug("FileUploaded last step:",info); if (op.downtoken_url) { // if op.dowontoken_url is not empty // need get downtoken before invoke the _FileUploaded_Handler @@ -1252,7 +1264,7 @@ function QiniuJsSDK() { throw ('invalid json format'); } var info_extended = {}; - plupload.extend(info_extended, that.parseJSON(info), res_downtoken); + plupload.extend(info_extended, that.parseJSON(info.response), res_downtoken); if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); } @@ -1266,7 +1278,7 @@ function QiniuJsSDK() { } } }; - ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain); + ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); } else if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, info); } @@ -1276,10 +1288,10 @@ function QiniuJsSDK() { ctx = ctx ? ctx : res.ctx; // if ctx is not empty // that means the upload strategy is chunk upload - // befroe the invoke the last_step + // before the invoke the last_step // we need request the mkfile to compose all uploaded chunks // else - // invalke the last_step + // invoke the last_step logger.debug("ctx: ", ctx); if (ctx) { var key = ''; @@ -1325,21 +1337,23 @@ function QiniuJsSDK() { logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { localStorage.removeItem(file.name); - var info; if (ajax.status === 200) { - info = ajax.responseText; - logger.debug("mkfile is success: ", info); - last_step(up, file, info); + var ajaxInfo = {}; + ajaxInfo.response = ajax.responseText; + ajaxInfo.responseHeaders = ajax.getAllResponseHeaders(); + ajaxInfo.status = ajax.status; + logger.debug("mkfile is success: ", ajaxInfo); + last_step(up, file, ajaxInfo); } else { - info = { + var ajaxInfo = { status: ajax.status, response: ajax.responseText, file: file, code: -200, responseHeaders: ajax.getAllResponseHeaders() }; - logger.debug("mkfile is error: ", info); - uploader.trigger('Error', info); + logger.debug("mkfile is error: ", ajaxInfo); + uploader.trigger('Error', ajaxInfo); } } }; @@ -1351,7 +1365,7 @@ function QiniuJsSDK() { ajax.send(ctx); logger.debug("mkfile: ", url); } else { - last_step(up, file, info.response); + last_step(up, file, info); } }; From 3690fd833171fca0b437dde9c71bf15e71b8db2c Mon Sep 17 00:00:00 2001 From: Jemy Date: Wed, 22 Mar 2017 22:24:30 +0800 Subject: [PATCH 13/44] make js sdk compatible with latest version plupload 2.3.1 --- bower.json | 2 +- demo/scripts/main.js | 2 +- dist/qiniu.js | 52 ++++++++++++++++++++++++++++---------------- src/qiniu.js | 12 +++++----- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/bower.json b/bower.json index eeb3eebd..393beb08 100644 --- a/bower.json +++ b/bower.json @@ -42,7 +42,7 @@ "url": "git://github.com/qiniu/js-sdk.git" }, "dependencies": { - "plupload": "=2.1.1" + "plupload": "=2.3.1" }, "devDependencies": { "bootstrap": "~3.3.6", diff --git a/demo/scripts/main.js b/demo/scripts/main.js index f6e2a5f9..065c199e 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -14,7 +14,7 @@ $(function() { flash_swf_url: 'bower_components/plupload/js/Moxie.swf', dragdrop: true, chunk_size: '4mb', - multi_selection: !(mOxie.Env.OS.toLowerCase()==="ios"), + multi_selection: !(moxie.core.utils.Env.OS.toLowerCase()==="ios"), uptoken_url: $('#uptoken_url').val(), // uptoken_func: function(){ // var ajax = new XMLHttpRequest(); diff --git a/dist/qiniu.js b/dist/qiniu.js index e1d80559..a9960f47 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-3-15 + * Date: 2017-3-22 */ /*global plupload ,mOxie*/ @@ -584,14 +584,25 @@ function QiniuJsSDK() { var getHosts = function(hosts) { var result = []; + var uploadIndex=-1; for (var i = 0; i < hosts.length; i++) { var host = hosts[i]; + if(host.indexOf("upload")!=-1) { + uploadIndex=i; + } if (host.indexOf('-H') === 0) { result.push(host.split(' ')[2]); } else { result.push(host); } } + + if (uploadIndex!=-1) { + //make upload domains first + var uploadDomain=result[uploadIndex]; + result[uploadIndex]=result[0]; + result[0]=uploadDomain; + } return result; }; @@ -612,7 +623,7 @@ function QiniuJsSDK() { var getUpHosts = function(uptoken) { var putPolicy = getPutPolicy(uptoken); // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; - // IE 9- is not support protocal relative url + // IE9 does not support protocol relative url var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; logger.debug("putPolicy: ", putPolicy); logger.debug("get uphosts from: ", uphosts_url); @@ -1072,10 +1083,10 @@ function QiniuJsSDK() { // store the chunk upload info and set next chunk upload url uploader.bind('ChunkUploaded', function(up, file, info) { logger.debug("ChunkUploaded event activated"); - logger.debug("file: ", file); - logger.debug("info: ", info); + logger.debug("ChunkUploaded file: ", file); + logger.debug("ChunkUploaded info: ", info); var res = that.parseJSON(info.response); - logger.debug("res: ", res); + logger.debug("ChunkUploaded res: ", res); // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' ctx = ctx ? ctx + ',' + res.ctx : res.ctx; var leftSize = info.total - info.offset; @@ -1233,9 +1244,10 @@ function QiniuJsSDK() { uploader.bind('FileUploaded', (function(_FileUploaded_Handler) { return function(up, file, info) { logger.debug("FileUploaded event activated"); - logger.debug("file: ", file); - logger.debug("info: ", info); + logger.debug("FileUploaded file: ", file); + logger.debug("FileUploaded info: ", info); var last_step = function(up, file, info) { + logger.debug("FileUploaded last step:",info); if (op.downtoken_url) { // if op.dowontoken_url is not empty // need get downtoken before invoke the _FileUploaded_Handler @@ -1252,7 +1264,7 @@ function QiniuJsSDK() { throw ('invalid json format'); } var info_extended = {}; - plupload.extend(info_extended, that.parseJSON(info), res_downtoken); + plupload.extend(info_extended, that.parseJSON(info.response), res_downtoken); if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); } @@ -1266,7 +1278,7 @@ function QiniuJsSDK() { } } }; - ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain); + ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); } else if (_FileUploaded_Handler) { _FileUploaded_Handler(up, file, info); } @@ -1276,10 +1288,10 @@ function QiniuJsSDK() { ctx = ctx ? ctx : res.ctx; // if ctx is not empty // that means the upload strategy is chunk upload - // befroe the invoke the last_step + // before the invoke the last_step // we need request the mkfile to compose all uploaded chunks // else - // invalke the last_step + // invoke the last_step logger.debug("ctx: ", ctx); if (ctx) { var key = ''; @@ -1325,21 +1337,23 @@ function QiniuJsSDK() { logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { localStorage.removeItem(file.name); - var info; if (ajax.status === 200) { - info = ajax.responseText; - logger.debug("mkfile is success: ", info); - last_step(up, file, info); + var ajaxInfo = {}; + ajaxInfo.response = ajax.responseText; + ajaxInfo.responseHeaders = ajax.getAllResponseHeaders(); + ajaxInfo.status = ajax.status; + logger.debug("mkfile is success: ", ajaxInfo); + last_step(up, file, ajaxInfo); } else { - info = { + var ajaxInfo = { status: ajax.status, response: ajax.responseText, file: file, code: -200, responseHeaders: ajax.getAllResponseHeaders() }; - logger.debug("mkfile is error: ", info); - uploader.trigger('Error', info); + logger.debug("mkfile is error: ", ajaxInfo); + uploader.trigger('Error', ajaxInfo); } } }; @@ -1351,7 +1365,7 @@ function QiniuJsSDK() { ajax.send(ctx); logger.debug("mkfile: ", url); } else { - last_step(up, file, info.response); + last_step(up, file, info); } }; diff --git a/src/qiniu.js b/src/qiniu.js index 664f8610..9d8ad3d4 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -555,7 +555,7 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true - var isSpecialSafari = (mOxie.Env.browser === "Safari" && mOxie.Env.version <= 5 && mOxie.Env.os === "Windows" && mOxie.Env.osVersion === "7") || (mOxie.Env.browser === "Safari" && mOxie.Env.os === "iOS" && mOxie.Env.osVersion === "7"); + var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); // case IE 9-,chunk_size is not empty and flash is included in runtimes // set op.chunk_size to zero //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { @@ -631,7 +631,7 @@ function QiniuJsSDK() { var ajax; if (ie && ie <= 9) { ajax = new mOxie.XMLHttpRequest(); - mOxie.Env.swf_url = op.flash_swf_url; + moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); } @@ -786,7 +786,7 @@ function QiniuJsSDK() { logger.debug("init uploader start"); - logger.debug("environment: ", mOxie.Env); + logger.debug("environment: ", moxie.core.utils.Env); logger.debug("userAgent: ", navigator.userAgent); @@ -869,7 +869,7 @@ function QiniuJsSDK() { // detect is iOS var is_ios = function (){ - if(mOxie.Env.OS.toLowerCase()==="ios") { + if(moxie.core.utils.Env.OS.toLowerCase()==="ios") { return true; } else { return false; @@ -964,7 +964,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" || ua.match(/V1_AND_SQ/i)) && mOxie.Env.OS.toLowerCase()==="android") { + if((ua.match(/MicroMessenger/i) || moxie.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase()==="android") { return true; } else { return false; @@ -1326,7 +1326,7 @@ function QiniuJsSDK() { var ajax; if (ie && ie <= 9) { ajax = new mOxie.XMLHttpRequest(); - mOxie.Env.swf_url = op.flash_swf_url; + moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); } From b1abb175ccdeb1b46a2bdb3549c83b8b73024b6b Mon Sep 17 00:00:00 2001 From: Jemy Date: Thu, 23 Mar 2017 09:58:55 +0800 Subject: [PATCH 14/44] update to the latest ply-load moxie function --- demo/scripts/main.js | 3 +++ src/qiniu.js | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 065c199e..8499a31b 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -46,6 +46,9 @@ $(function() { auto_start: true, log_level: 5, init: { + 'BeforeChunkUpload':function (up,file) { + console.log("before chunk upload:",file.name); + }, 'FilesAdded': function(up, files) { $('table').show(); $('#success').hide(); diff --git a/src/qiniu.js b/src/qiniu.js index 9d8ad3d4..9540c7d2 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -630,7 +630,7 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var ajax; if (ie && ie <= 9) { - ajax = new mOxie.XMLHttpRequest(); + ajax = new moxie.xhr.XMLHttpRequest(); moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); @@ -1325,7 +1325,7 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var ajax; if (ie && ie <= 9) { - ajax = new mOxie.XMLHttpRequest(); + ajax = new moxie.xhr.XMLHttpRequest(); moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); From c63bbdcfb80042869bd40c18c123f64e8a7dc262 Mon Sep 17 00:00:00 2001 From: Jemy Date: Thu, 23 Mar 2017 11:19:40 +0800 Subject: [PATCH 15/44] some fix to make build success --- bower.json | 2 +- demo/scripts/main.js | 8 ++++++-- dist/qiniu.js | 47 ++++++++++++++++++++++---------------------- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- src/qiniu.js | 29 ++++++++++++++------------- 6 files changed, 48 insertions(+), 42 deletions(-) diff --git a/bower.json b/bower.json index 393beb08..d3661cb0 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "qiniu", "description": "Javascript SDK for Qiniu Resource (Cloud) Storage API", - "version": "v1.0.19", + "version": "v1.0.20", "main": "dist/qiniu.js", "moduleType": [ "globals" diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 8499a31b..10e12598 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -59,6 +59,7 @@ $(function() { }); }, 'BeforeUpload': function(up, file) { + console.log("this is a beforeupload function from init"); var progress = new FileProgress(file, 'fsUploadProgress'); var chunk_size = plupload.parseSize(this.getOption('chunk_size')); if (up.runtime === 'html5' && chunk_size) { @@ -91,8 +92,11 @@ $(function() { // } } }); - - uploader.bind('FileUploaded', function() { + //uploader.init(); + uploader.bind('BeforeUpload', function () { + console.log("hello man, i am going to upload a file"); + }); + uploader.bind('FileUploaded', function () { console.log('hello man,a file is uploaded'); }); $('#container').on( diff --git a/dist/qiniu.js b/dist/qiniu.js index a9960f47..6ac038d5 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,10 +6,10 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-3-22 + * Date: 2017-3-23 */ -/*global plupload ,mOxie*/ +/*global plupload ,moxie*/ /*global ActiveXObject */ /*exported Qiniu */ /*exported QiniuJsSDK */ @@ -555,7 +555,7 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true - var isSpecialSafari = (mOxie.Env.browser === "Safari" && mOxie.Env.version <= 5 && mOxie.Env.os === "Windows" && mOxie.Env.osVersion === "7") || (mOxie.Env.browser === "Safari" && mOxie.Env.os === "iOS" && mOxie.Env.osVersion === "7"); + var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); // case IE 9-,chunk_size is not empty and flash is included in runtimes // set op.chunk_size to zero //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { @@ -584,11 +584,11 @@ function QiniuJsSDK() { var getHosts = function(hosts) { var result = []; - var uploadIndex=-1; + var uploadIndex = -1; for (var i = 0; i < hosts.length; i++) { var host = hosts[i]; - if(host.indexOf("upload")!=-1) { - uploadIndex=i; + if (host.indexOf("upload") !== -1) { + uploadIndex = i; } if (host.indexOf('-H') === 0) { result.push(host.split(' ')[2]); @@ -597,11 +597,11 @@ function QiniuJsSDK() { } } - if (uploadIndex!=-1) { + if (uploadIndex !== -1) { //make upload domains first - var uploadDomain=result[uploadIndex]; - result[uploadIndex]=result[0]; - result[0]=uploadDomain; + var uploadDomain = result[uploadIndex]; + result[uploadIndex] = result[0]; + result[0] = uploadDomain; } return result; }; @@ -630,8 +630,8 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var ajax; if (ie && ie <= 9) { - ajax = new mOxie.XMLHttpRequest(); - mOxie.Env.swf_url = op.flash_swf_url; + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); } @@ -786,7 +786,7 @@ function QiniuJsSDK() { logger.debug("init uploader start"); - logger.debug("environment: ", mOxie.Env); + logger.debug("environment: ", moxie.core.utils.Env); logger.debug("userAgent: ", navigator.userAgent); @@ -869,7 +869,7 @@ function QiniuJsSDK() { // detect is iOS var is_ios = function (){ - if(mOxie.Env.OS.toLowerCase()==="ios") { + if(moxie.core.utils.Env.OS.toLowerCase()==="ios") { return true; } else { return false; @@ -964,7 +964,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" || ua.match(/V1_AND_SQ/i)) && mOxie.Env.OS.toLowerCase()==="android") { + if((ua.match(/MicroMessenger/i) || moxie.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase()==="android") { return true; } else { return false; @@ -1325,8 +1325,8 @@ function QiniuJsSDK() { var ie = that.detectIEVersion(); var ajax; if (ie && ie <= 9) { - ajax = new mOxie.XMLHttpRequest(); - mOxie.Env.swf_url = op.flash_swf_url; + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; }else{ ajax = that.createAjax(); } @@ -1337,15 +1337,17 @@ function QiniuJsSDK() { logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { localStorage.removeItem(file.name); + var ajaxInfo; if (ajax.status === 200) { - var ajaxInfo = {}; - ajaxInfo.response = ajax.responseText; - ajaxInfo.responseHeaders = ajax.getAllResponseHeaders(); - ajaxInfo.status = ajax.status; + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + responseHeaders: ajax.getAllResponseHeaders(), + }; logger.debug("mkfile is success: ", ajaxInfo); last_step(up, file, ajaxInfo); } else { - var ajaxInfo = { + ajaxInfo = { status: ajax.status, response: ajax.responseText, file: file, @@ -1375,7 +1377,6 @@ function QiniuJsSDK() { // init uploader uploader.init(); - logger.debug("invoke uploader.init()"); logger.debug("init uploader end"); diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 15b65081..3e646f2b 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.19 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=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))};var c=function(a){var b=[];for(var c=0;c=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",mOxie.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===mOxie.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=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 i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("file: ",b),logger.debug("info: ",c);var d=that.parseJSON(c.response);logger.debug("res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("file: ",d),logger.debug("info: ",e);var f=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,that.stringifyJSON(h))}else p.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 g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new mOxie.XMLHttpRequest,mOxie.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a=s.responseText,logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e.response)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else p.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a={status:s.status,response:s.responseText,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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 bca46a27..442a09a3 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","mOxie","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","host","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","setRequestHeader","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","responseHeaders","getAllResponseHeaders","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 +{"version":3,"file":"dist/qiniu.min.js","sources":["dist/qiniu.js"],"names":["global","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","host","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","xhr","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","setRequestHeader","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","ajaxInfo","responseHeaders","getAllResponseHeaders","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","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 9540c7d2..5536dd87 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -9,7 +9,7 @@ * Date: @DATE */ -/*global plupload ,mOxie*/ +/*global plupload ,moxie*/ /*global ActiveXObject */ /*exported Qiniu */ /*exported QiniuJsSDK */ @@ -584,11 +584,11 @@ function QiniuJsSDK() { var getHosts = function(hosts) { var result = []; - var uploadIndex=-1; + var uploadIndex = -1; for (var i = 0; i < hosts.length; i++) { var host = hosts[i]; - if(host.indexOf("upload")!=-1) { - uploadIndex=i; + if (host.indexOf("upload") !== -1) { + uploadIndex = i; } if (host.indexOf('-H') === 0) { result.push(host.split(' ')[2]); @@ -597,11 +597,11 @@ function QiniuJsSDK() { } } - if (uploadIndex!=-1) { + if (uploadIndex !== -1) { //make upload domains first - var uploadDomain=result[uploadIndex]; - result[uploadIndex]=result[0]; - result[0]=uploadDomain; + var uploadDomain = result[uploadIndex]; + result[uploadIndex] = result[0]; + result[0] = uploadDomain; } return result; }; @@ -1337,15 +1337,17 @@ function QiniuJsSDK() { logger.debug("ajax.readyState: ", ajax.readyState); if (ajax.readyState === 4) { localStorage.removeItem(file.name); + var ajaxInfo; if (ajax.status === 200) { - var ajaxInfo = {}; - ajaxInfo.response = ajax.responseText; - ajaxInfo.responseHeaders = ajax.getAllResponseHeaders(); - ajaxInfo.status = ajax.status; + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + responseHeaders: ajax.getAllResponseHeaders(), + }; logger.debug("mkfile is success: ", ajaxInfo); last_step(up, file, ajaxInfo); } else { - var ajaxInfo = { + ajaxInfo = { status: ajax.status, response: ajax.responseText, file: file, @@ -1375,7 +1377,6 @@ function QiniuJsSDK() { // init uploader uploader.init(); - logger.debug("invoke uploader.init()"); logger.debug("init uploader end"); From 73a8142fcc0a809a321f53b31ea87ae1c07fd969 Mon Sep 17 00:00:00 2001 From: Jemy Date: Thu, 23 Mar 2017 15:21:15 +0800 Subject: [PATCH 16/44] change version according to comments --- bower.json | 2 +- dist/qiniu.js | 2 +- dist/qiniu.min.js | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index d3661cb0..4cdaa5f7 100644 --- a/bower.json +++ b/bower.json @@ -42,7 +42,7 @@ "url": "git://github.com/qiniu/js-sdk.git" }, "dependencies": { - "plupload": "=2.3.1" + "plupload": "~2.3.1" }, "devDependencies": { "bootstrap": "~3.3.6", diff --git a/dist/qiniu.js b/dist/qiniu.js index 6ac038d5..b213df98 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -1,5 +1,5 @@ /*! - * qiniu-js-sdk v1.0.19 + * qiniu-js-sdk v1.0.20 * * Copyright 2015 by Qiniu * Released under GPL V2 License. diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 3e646f2b..859b5751 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ -/*! qiniu-js v1.0.19 | Copyright 2015 by Qiniu */ +/*! qiniu-js v1.0.20 | Copyright 2015 by Qiniu */ !function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else p.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a={status:s.status,response:s.responseText,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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/package.json b/package.json index ee4a26e6..9684343b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qiniu-js", "jsName": "qiniu", - "version": "1.0.19", + "version": "1.0.20", "private": false, "scripts": { "start": "node demo/server.js" From 682c818cf11a7d379010bb6753d93b47f6ad74db Mon Sep 17 00:00:00 2001 From: lizhiwei <550822844@qq.com> Date: Wed, 5 Apr 2017 10:59:59 +0800 Subject: [PATCH 17/44] modify readme --- README.md | 2 +- demo/scripts/main.js | 1 - demo/server.js | 2 -- dist/qiniu.js | 7 +++---- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- src/qiniu.js | 5 ++--- 7 files changed, 8 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e2d6ac62..168e10a1 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js ### 准备 -- JS-SDK 的上传功能基于 [Plupload](http://www.plupload.com/) 插件封装的,所以需要[下载 Plupload](http://plupload.com/download),建议使用 2.1.1 版本。 +- JS-SDK 的上传功能基于 [Plupload](http://www.plupload.com/) 插件封装的,所以需要[下载 Plupload](http://plupload.com/download)。 您也可以访问[ 开放静态文件 CDN ](http://staticfile.org/),搜索 plupload,使用 CDN 加速的静态文件地址。 - 在使用 JS-SDK 之前,您必须先注册一个七牛帐号,并登录控制台获取一对有效的 AccessKey 和 SecretKey,您可以阅读[ 快速入门 ](https://developer.qiniu.com/kodo/manual/console-quickstart)和[ 安全机制 ](https://developer.qiniu.com/kodo/manual/security#security) 以进一步了解如何正确使用和管理密钥 。 diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 10e12598..451c9f79 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -3,7 +3,6 @@ /*global FileProgress */ /*global hljs */ - $(function() { var uploader = Qiniu.uploader({ runtimes: 'html5,flash,html4', diff --git a/demo/server.js b/demo/server.js index 6e8d46e6..30e37336 100644 --- a/demo/server.js +++ b/demo/server.js @@ -7,7 +7,6 @@ app.configure(function() { app.use(express.static(__dirname + '/')); }); - app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); @@ -95,7 +94,6 @@ qiniu.conf.SECRET_KEY = config.SECRET_KEY; var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name); - app.listen(config.Port, function() { console.log('Listening on port %d\n', config.Port); console.log('▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ Demos ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽') diff --git a/dist/qiniu.js b/dist/qiniu.js index b213df98..33988a22 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-3-23 + * Date: 2017-4-5 */ /*global plupload ,moxie*/ @@ -690,8 +690,8 @@ function QiniuJsSDK() { logger.debug("get uptoken from: ", that.uptoken_url); // TODO: use mOxie var ajax = that.createAjax(); - ajax.open('GET', that.uptoken_url, false); - ajax.setRequestHeader("If-Modified-Since", "0"); + ajax.open('GET', that.uptoken_url + '?' + (+ new Date()), false); + // ajax.setRequestHeader("If-Modified-Since", "0"); // ajax.onreadystatechange = function() { // if (ajax.readyState === 4 && ajax.status === 200) { // var res = that.parseJSON(ajax.responseText); @@ -1639,7 +1639,6 @@ function QiniuJsSDK() { var Qiniu = new QiniuJsSDK(); global.Qiniu = Qiniu; - global.QiniuJsSDK = QiniuJsSDK; })( window ); diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 859b5751..88f7485b 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.20 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url,!1),c.setRequestHeader("If-Modified-Since","0"),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else p.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a={status:s.status,response:s.responseText,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else p.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a={status:s.status,response:s.responseText,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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 442a09a3..1de89615 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","host","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","xhr","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","setRequestHeader","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","ajaxInfo","responseHeaders","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","host","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","xhr","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","setRequestHeader","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","responseHeaders","getAllResponseHeaders","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","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 5536dd87..f871c5cc 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -690,8 +690,8 @@ function QiniuJsSDK() { logger.debug("get uptoken from: ", that.uptoken_url); // TODO: use mOxie var ajax = that.createAjax(); - ajax.open('GET', that.uptoken_url, false); - ajax.setRequestHeader("If-Modified-Since", "0"); + ajax.open('GET', that.uptoken_url + '?' + (+ new Date()), false); + // ajax.setRequestHeader("If-Modified-Since", "0"); // ajax.onreadystatechange = function() { // if (ajax.readyState === 4 && ajax.status === 200) { // var res = that.parseJSON(ajax.responseText); @@ -1639,7 +1639,6 @@ function QiniuJsSDK() { var Qiniu = new QiniuJsSDK(); global.Qiniu = Qiniu; - global.QiniuJsSDK = QiniuJsSDK; })( window ); From 981ae45847c7dcc9c7aec3b6c4eeb849980a4c58 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Fri, 30 Jun 2017 16:08:47 +0800 Subject: [PATCH 18/44] format code --- src/qiniu.js | 2882 +++++++++++++++++++++++++------------------------- 1 file changed, 1441 insertions(+), 1441 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index f871c5cc..18598065 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -7,1638 +7,1638 @@ * GitHub: http://github.com/qiniu/js-sdk * * Date: @DATE -*/ + */ /*global plupload ,moxie*/ /*global ActiveXObject */ /*exported Qiniu */ /*exported QiniuJsSDK */ -;(function( global ){ +;(function (global) { -/** - * Creates new cookie or removes cookie with negative expiration - * @param key The key or identifier for the store - * @param value Contents of the store - * @param exp Expiration - creation defaults to 30 days - */ -function createCookie(key, value, exp) { - var date = new Date(); - date.setTime(date.getTime() + (exp * 24 * 60 * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - document.cookie = key + "=" + value + expires + "; path=/"; -} - -/** - * Returns contents of cookie - * @param key The key or identifier for the store - */ -function readCookie(key) { - var nameEQ = key + "="; - var ca = document.cookie.split(';'); - for (var i = 0, max = ca.length; i < max; i++) { - var c = ca[i]; - while (c.charAt(0) === ' ') { - c = c.substring(1, c.length); - } - if (c.indexOf(nameEQ) === 0) { - return c.substring(nameEQ.length, c.length); - } + /** + * Creates new cookie or removes cookie with negative expiration + * @param key The key or identifier for the store + * @param value Contents of the store + * @param exp Expiration - creation defaults to 30 days + */ + function createCookie(key, value, exp) { + var date = new Date(); + date.setTime(date.getTime() + (exp * 24 * 60 * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + document.cookie = key + "=" + value + expires + "; path=/"; } - return null; -} - -// if current browser is not support localStorage -// use cookie to make a polyfill -if ( !window.localStorage ) { - window.localStorage = { - setItem: function (key, value) { - createCookie(key, value, 30); - }, - getItem: function (key) { - return readCookie(key); - }, - removeItem: function (key) { - createCookie(key, '', -1); - } - }; -} - -function QiniuJsSDK() { - - var that = this; /** - * detect IE version - * if current browser is not IE - * it will return false - * else - * it will return version of current IE browser - * @return {Number|Boolean} IE version or false + * Returns contents of cookie + * @param key The key or identifier for the store */ - this.detectIEVersion = function() { - var v = 4, - div = document.createElement('div'), - all = div.getElementsByTagName('i'); - while ( - div.innerHTML = '', - all[0] - ) { - v++; - } - 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+"]"; - var msg = header; - for (var i = 0; i < args.length; i++) { - if (typeof args[i] === "string") { - msg += " " + args[i]; - } else { - msg += " " + that.stringifyJSON(args[i]); + function readCookie(key) { + var nameEQ = key + "="; + var ca = document.cookie.split(';'); + for (var i = 0, max = ca.length; i < max; i++) { + var c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1, c.length); + } + if (c.indexOf(nameEQ) === 0) { + return c.substring(nameEQ.length, c.length); } } - 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); - console.log(msg); - }else{ - args.unshift(header); - console.log.apply(console, args); - } - if (document.getElementById('qiniu-js-sdk-log')) { - document.getElementById('qiniu-js-sdk-log').innerHTML += '

'+msg+'

'; - } + return null; } - 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); + // if current browser is not support localStorage + // use cookie to make a polyfill + if (!window.localStorage) { + window.localStorage = { + setItem: function (key, value) { + createCookie(key, value, 30); + }, + getItem: function (key) { + return readCookie(key); + }, + removeItem: function (key) { + createCookie(key, '', -1); } }; } - for (var property in logger){ - if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) { - makeLogFunc(property); - } - } - - - var qiniuUploadUrl; - if (window.location.protocol === 'https:') { - qiniuUploadUrl = 'https://up.qbox.me'; - } else { - qiniuUploadUrl = 'http://upload.qiniu.com'; - } + function QiniuJsSDK() { - /** - * qiniu upload urls - * 'qiniuUploadUrls' is used to change target when current url is not avaliable - * @type {Array} - */ - var qiniuUploadUrls = [ - "http://upload.qiniu.com", - "http://up.qiniu.com" - ]; - - var qiniuUpHosts = { - "http": [ - "http://upload.qiniu.com", - "http://up.qiniu.com" - ], - "https": [ - "https://up.qbox.me" - ] - }; - - var changeUrlTimes = 0; - - /** - * reset upload url - * if current page protocal is https - * it will always return 'https://up.qbox.me' - * else - * it will set 'qiniuUploadUrl' value with 'qiniuUploadUrls' looply - */ - this.resetUploadUrl = function(){ - var hosts = window.location.protocol === 'https:' ? qiniuUpHosts.https : qiniuUpHosts.http; - var i = changeUrlTimes % hosts.length; - qiniuUploadUrl = hosts[i]; - changeUrlTimes++; - logger.debug('resetUploadUrl: '+qiniuUploadUrl); - }; - - // this.resetUploadUrl(); + var that = this; + /** + * detect IE version + * if current browser is not IE + * it will return false + * else + * it will return version of current IE browser + * @return {Number|Boolean} IE version or false + */ + this.detectIEVersion = function () { + var v = 4, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + while ( + div.innerHTML = '', + all[0] + ) { + v++; + } + return v > 4 ? v : false; + }; - /** - * is image - * @param {String} url of a file - * @return {Boolean} file is a image or not - */ - this.isImage = function(url) { - url = url.split(/[?#]/)[0]; - return (/\.(png|jpg|jpeg|gif|bmp)$/i).test(url); - }; + var logger = { + MUTE: 0, + FATA: 1, + ERROR: 2, + WARN: 3, + INFO: 4, + DEBUG: 5, + TRACE: 6, + level: 0 + }; - /** - * get file extension - * @param {String} filename - * @return {String} file extension - * @example - * input: test.txt - * output: txt - */ - this.getFileExtension = function(filename) { - var tempArr = filename.split("."); - var ext; - if (tempArr.length === 1 || (tempArr[0] === "" && tempArr.length === 2)) { - ext = ""; - } else { - ext = tempArr.pop().toLowerCase(); //get the extension and make it lower-case + function log(type, args) { + var header = "[qiniu-js-sdk][" + type + "]"; + var msg = header; + for (var i = 0; i < args.length; i++) { + if (typeof args[i] === "string") { + msg += " " + args[i]; + } else { + msg += " " + that.stringifyJSON(args[i]); + } + } + 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); + console.log(msg); + } else { + args.unshift(header); + console.log.apply(console, args); + } + if (document.getElementById('qiniu-js-sdk-log')) { + document.getElementById('qiniu-js-sdk-log').innerHTML += '

' + msg + '

'; + } } - return ext; - }; - /** - * encode string by utf8 - * @param {String} string to encode - * @return {String} encoded string - */ - this.utf8_encode = function(argString) { - // http://kevin.vanzonneveld.net - // + original by: Webtoolkit.info (http://www.webtoolkit.info/) - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: sowberry - // + tweaked by: Jack - // + bugfixed by: Onno Marsman - // + improved by: Yves Sucaet - // + bugfixed by: Onno Marsman - // + bugfixed by: Ulrich - // + bugfixed by: Rafal Kukawski - // + improved by: kirilloid - // + bugfixed by: kirilloid - // * example 1: this.utf8_encode('Kevin van Zonneveld'); - // * returns 1: 'Kevin van Zonneveld' - - if (argString === null || typeof argString === 'undefined') { - return ''; + 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); + } + }; } - var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n'); - var utftext = '', - start, end, stringl = 0; - - start = end = 0; - stringl = string.length; - for (var n = 0; n < stringl; n++) { - var c1 = string.charCodeAt(n); - var enc = null; - - if (c1 < 128) { - end++; - } else if (c1 > 127 && c1 < 2048) { - enc = String.fromCharCode( - (c1 >> 6) | 192, (c1 & 63) | 128 - ); - } else if (c1 & 0xF800 ^ 0xD800 > 0) { - enc = String.fromCharCode( - (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 - ); - } else { // surrogate pairs - if (c1 & 0xFC00 ^ 0xD800 > 0) { - throw new RangeError('Unmatched trail surrogate at ' + n); - } - var c2 = string.charCodeAt(++n); - if (c2 & 0xFC00 ^ 0xDC00 > 0) { - throw new RangeError('Unmatched lead surrogate at ' + (n - 1)); - } - c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000; - enc = String.fromCharCode( - (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 - ); - } - if (enc !== null) { - if (end > start) { - utftext += string.slice(start, end); - } - utftext += enc; - start = end = n + 1; + for (var property in logger) { + if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) { + makeLogFunc(property); } } - if (end > start) { - utftext += string.slice(start, stringl); - } - return utftext; - }; - - this.base64_decode = function (data) { - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Thunder.m - // + input by: Aman Gupta - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Onno Marsman - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); - // * returns 1: 'Kevin van Zonneveld' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['atob'] == 'function') { - // return atob(data); - //} - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - dec = "", - tmp_arr = []; - - if (!data) { - return data; + var qiniuUploadUrl; + if (window.location.protocol === 'https:') { + qiniuUploadUrl = 'https://up.qbox.me'; + } else { + qiniuUploadUrl = 'http://upload.qiniu.com'; } - data += ''; + /** + * qiniu upload urls + * 'qiniuUploadUrls' is used to change target when current url is not avaliable + * @type {Array} + */ + var qiniuUploadUrls = [ + "http://upload.qiniu.com", + "http://up.qiniu.com" + ]; + + var qiniuUpHosts = { + "http": [ + "http://upload.qiniu.com", + "http://up.qiniu.com" + ], + "https": [ + "https://up.qbox.me" + ] + }; + + var changeUrlTimes = 0; + + /** + * reset upload url + * if current page protocal is https + * it will always return 'https://up.qbox.me' + * else + * it will set 'qiniuUploadUrl' value with 'qiniuUploadUrls' looply + */ + this.resetUploadUrl = function () { + var hosts = window.location.protocol === 'https:' ? qiniuUpHosts.https : qiniuUpHosts.http; + var i = changeUrlTimes % hosts.length; + qiniuUploadUrl = hosts[i]; + changeUrlTimes++; + logger.debug('resetUploadUrl: ' + qiniuUploadUrl); + }; - do { // unpack four hexets into three octets using index points in b64 - h1 = b64.indexOf(data.charAt(i++)); - h2 = b64.indexOf(data.charAt(i++)); - h3 = b64.indexOf(data.charAt(i++)); - h4 = b64.indexOf(data.charAt(i++)); + // this.resetUploadUrl(); - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; + /** + * is image + * @param {String} url of a file + * @return {Boolean} file is a image or not + */ + this.isImage = function (url) { + url = url.split(/[?#]/)[0]; + return (/\.(png|jpg|jpeg|gif|bmp)$/i).test(url); + }; - if (h3 === 64) { - tmp_arr[ac++] = String.fromCharCode(o1); - } else if (h4 === 64) { - tmp_arr[ac++] = String.fromCharCode(o1, o2); + /** + * get file extension + * @param {String} filename + * @return {String} file extension + * @example + * input: test.txt + * output: txt + */ + this.getFileExtension = function (filename) { + var tempArr = filename.split("."); + var ext; + if (tempArr.length === 1 || (tempArr[0] === "" && tempArr.length === 2)) { + ext = ""; } else { - tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + ext = tempArr.pop().toLowerCase(); //get the extension and make it lower-case } - } while (i < data.length); + return ext; + }; - dec = tmp_arr.join(''); + /** + * encode string by utf8 + * @param {String} string to encode + * @return {String} encoded string + */ + this.utf8_encode = function (argString) { + // http://kevin.vanzonneveld.net + // + original by: Webtoolkit.info (http://www.webtoolkit.info/) + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: sowberry + // + tweaked by: Jack + // + bugfixed by: Onno Marsman + // + improved by: Yves Sucaet + // + bugfixed by: Onno Marsman + // + bugfixed by: Ulrich + // + bugfixed by: Rafal Kukawski + // + improved by: kirilloid + // + bugfixed by: kirilloid + // * example 1: this.utf8_encode('Kevin van Zonneveld'); + // * returns 1: 'Kevin van Zonneveld' + + if (argString === null || typeof argString === 'undefined') { + return ''; + } - return dec; - }; + var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n'); + var utftext = '', + start, end, stringl = 0; + + start = end = 0; + stringl = string.length; + for (var n = 0; n < stringl; n++) { + var c1 = string.charCodeAt(n); + var enc = null; + + if (c1 < 128) { + end++; + } else if (c1 > 127 && c1 < 2048) { + enc = String.fromCharCode( + (c1 >> 6) | 192, (c1 & 63) | 128 + ); + } else if (c1 & 0xF800 ^ 0xD800 > 0) { + enc = String.fromCharCode( + (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 + ); + } else { // surrogate pairs + if (c1 & 0xFC00 ^ 0xD800 > 0) { + throw new RangeError('Unmatched trail surrogate at ' + n); + } + var c2 = string.charCodeAt(++n); + if (c2 & 0xFC00 ^ 0xDC00 > 0) { + throw new RangeError('Unmatched lead surrogate at ' + (n - 1)); + } + c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000; + enc = String.fromCharCode( + (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 + ); + } + if (enc !== null) { + if (end > start) { + utftext += string.slice(start, end); + } + utftext += enc; + start = end = n + 1; + } + } - /** - * encode data by base64 - * @param {String} data to encode - * @return {String} encoded data - */ - this.base64_encode = function(data) { - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Bayron Guevara - // + improved by: Thunder.m - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // - depends on: this.utf8_encode - // * example 1: this.base64_encode('Kevin van Zonneveld'); - // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['atob'] == 'function') { - // return atob(data); - //} - var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - enc = '', - tmp_arr = []; - - if (!data) { - return data; - } + if (end > start) { + utftext += string.slice(start, stringl); + } - data = this.utf8_encode(data + ''); + return utftext; + }; - do { // pack three octets into four hexets - o1 = data.charCodeAt(i++); - o2 = data.charCodeAt(i++); - o3 = data.charCodeAt(i++); + this.base64_decode = function (data) { + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window['atob'] == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } - bits = o1 << 16 | o2 << 8 | o3; + data += ''; - h1 = bits >> 18 & 0x3f; - h2 = bits >> 12 & 0x3f; - h3 = bits >> 6 & 0x3f; - h4 = bits & 0x3f; + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); - // use hexets to index into b64, and append result to encoded string - tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); - } while (i < data.length); + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - enc = tmp_arr.join(''); + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; - switch (data.length % 3) { - case 1: - enc = enc.slice(0, -2) + '=='; - break; - case 2: - enc = enc.slice(0, -1) + '='; - break; - } + if (h3 === 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 === 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); - return enc; - }; + dec = tmp_arr.join(''); - /** - * encode string in url by base64 - * @param {String} string in url - * @return {String} encoded string - */ - this.URLSafeBase64Encode = function(v) { - v = this.base64_encode(v); - return v.replace(/\//g, '_').replace(/\+/g, '-'); - }; + return dec; + }; - this.URLSafeBase64Decode = function(v) { - v = v.replace(/_/g, '/').replace(/-/g, '+'); - return this.base64_decode(v); - }; + /** + * encode data by base64 + * @param {String} data to encode + * @return {String} encoded data + */ + this.base64_encode = function (data) { + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // - depends on: this.utf8_encode + // * example 1: this.base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window['atob'] == 'function') { + // return atob(data); + //} + var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = '', + tmp_arr = []; + + if (!data) { + return data; + } - // TODO: use mOxie - /** - * craete object used to AJAX - * @return {Object} - */ - this.createAjax = function(argument) { - var xmlhttp = {}; - if (window.XMLHttpRequest) { - xmlhttp = new XMLHttpRequest(); - } else { - xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); - } - return xmlhttp; - }; + data = this.utf8_encode(data + ''); - // TODO: enhance IE compatibility - /** - * parse json string to javascript object - * @param {String} json string - * @return {Object} object - */ - this.parseJSON = function(data) { - // Attempt to parse using the native JSON parser first - if (window.JSON && window.JSON.parse) { - return window.JSON.parse(data); - } + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); - //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; + bits = o1 << 16 | o2 << 8 | o3; - //var json; + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; - 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); - }); - } + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); - // todo 使用一下判断,增加安全性 - //if ( - // rx_one.test( - // text - // .replace(rx_two, '@') - // .replace(rx_three, ']') - // .replace(rx_four, '') - // ) - //) { - // return eval('(' + text + ')'); - //} - - return eval('('+text+')'); - }; + enc = tmp_arr.join(''); - /** - * 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; - } - }; + switch (data.length % 3) { + case 1: + enc = enc.slice(0, -2) + '=='; + break; + case 2: + enc = enc.slice(0, -1) + '='; + break; + } - /** - * trim space beside text - * @param {String} untrimed string - * @return {String} trimed string - */ - this.trim = function(text) { - return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); - }; + return enc; + }; - /** - * create a uploader by QiniuJsSDK - * @param {object} options to create a new uploader - * @return {object} uploader - */ - this.uploader = function(op) { + /** + * encode string in url by base64 + * @param {String} string in url + * @return {String} encoded string + */ + this.URLSafeBase64Encode = function (v) { + v = this.base64_encode(v); + return v.replace(/\//g, '_').replace(/\+/g, '-'); + }; - /********** inner function define start **********/ + this.URLSafeBase64Decode = function (v) { + v = v.replace(/_/g, '/').replace(/-/g, '+'); + return this.base64_decode(v); + }; - // according the different condition to reset chunk size - // and the upload strategy according with the chunk size - // when chunk size is zero will cause to direct upload - // see the statement binded on 'BeforeUpload' event - var reset_chunk_size = function() { - var ie = that.detectIEVersion(); - var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; - // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true - var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); - // case IE 9-,chunk_size is not empty and flash is included in runtimes - // set op.chunk_size to zero - //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { - if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { - // link: http://www.plupload.com/docs/Frequently-Asked-Questions#when-to-use-chunking-and-when-not - // when plupload chunk_size setting is't null ,it cause bug in ie8/9 which runs flash runtimes (not support html5) . - op.chunk_size = 0; - } else if (isSpecialSafari) { - // win7 safari / iOS7 safari have bug when in chunk upload mode - // reset chunk_size to 0 - // disable chunk in special version safari - op.chunk_size = 0; + // TODO: use mOxie + /** + * craete object used to AJAX + * @return {Object} + */ + this.createAjax = function (argument) { + var xmlhttp = {}; + if (window.XMLHttpRequest) { + xmlhttp = new XMLHttpRequest(); } else { - BLOCK_BITS = 20; - MAX_CHUNK_SIZE = 4 << BLOCK_BITS; //4M - - chunk_size = plupload.parseSize(op.chunk_size); - if (chunk_size > MAX_CHUNK_SIZE) { - op.chunk_size = MAX_CHUNK_SIZE; - } - // qiniu service max_chunk_size is 4m - // reset chunk_size to max_chunk_size(4m) when chunk_size > 4m + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } - // if op.chunk_size set 0 will be cause to direct upload + return xmlhttp; }; - var getHosts = function(hosts) { - var result = []; - var uploadIndex = -1; - for (var i = 0; i < hosts.length; i++) { - var host = hosts[i]; - if (host.indexOf("upload") !== -1) { - uploadIndex = i; - } - if (host.indexOf('-H') === 0) { - result.push(host.split(' ')[2]); - } else { - result.push(host); - } + // TODO: enhance IE compatibility + /** + * parse json string to javascript object + * @param {String} json string + * @return {Object} object + */ + this.parseJSON = function (data) { + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); } - if (uploadIndex !== -1) { - //make upload domains first - var uploadDomain = result[uploadIndex]; - result[uploadIndex] = result[0]; - result[0] = uploadDomain; - } - return result; - }; + //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 getPutPolicy = function (uptoken) { - var segments = uptoken.split(":"); - var ak = segments[0]; - var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); - putPolicy.ak = ak; - if (putPolicy.scope.indexOf(":") >= 0) { - putPolicy.bucket = putPolicy.scope.split(":")[0]; - putPolicy.key = putPolicy.scope.split(":")[1]; - } else { - putPolicy.bucket = putPolicy.scope; + //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); + }); } - return putPolicy; + + // todo 使用一下判断,增加安全性 + //if ( + // rx_one.test( + // text + // .replace(rx_two, '@') + // .replace(rx_three, ']') + // .replace(rx_four, '') + // ) + //) { + // return eval('(' + text + ')'); + //} + + return eval('(' + text + ')'); }; - var getUpHosts = function(uptoken) { - var putPolicy = getPutPolicy(uptoken); - // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; - // IE9 does not support protocol relative url - var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; - logger.debug("putPolicy: ", putPolicy); - logger.debug("get uphosts from: ", uphosts_url); - var ie = that.detectIEVersion(); - var ajax; - if (ie && ie <= 9) { - ajax = new moxie.xhr.XMLHttpRequest(); - moxie.core.utils.Env.swf_url = op.flash_swf_url; - }else{ - ajax = that.createAjax(); + /** + * 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); } - ajax.open('GET', uphosts_url, false); - var onreadystatechange = function(){ - logger.debug("ajax.readyState: ", ajax.readyState); - if (ajax.readyState === 4) { - logger.debug("ajax.status: ", ajax.status); - if (ajax.status < 400) { - var res = that.parseJSON(ajax.responseText); - qiniuUpHosts.http = getHosts(res.http.up); - qiniuUpHosts.https = getHosts(res.https.up); - logger.debug("get new uphosts: ", qiniuUpHosts); - that.resetUploadUrl(); + 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 { - logger.error("get uphosts error: ", ajax.responseText); + var string = []; + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + string.push(that.stringifyJSON(property) + ':' + that.stringifyJSON(obj[property])); + } + } + return '{' + string.join(',') + '}'; } - } - }; - if (ie && ie <= 9) { - ajax.bind('readystatechange', onreadystatechange); - }else{ - ajax.onreadystatechange = onreadystatechange; + break; + case 'number': + return obj; + case false: + return obj; + case 'boolean': + return obj; } - ajax.send(); - // ajax.send(); - // if (ajax.status < 400) { - // var res = that.parseJSON(ajax.responseText); - // qiniuUpHosts.http = getHosts(res.http.up); - // qiniuUpHosts.https = getHosts(res.https.up); - // logger.debug("get new uphosts: ", qiniuUpHosts); - // that.resetUploadUrl(); - // } else { - // logger.error("get uphosts error: ", ajax.responseText); - // } - return; }; - var getUptoken = function(file) { - if (!that.token || (op.uptoken_url && that.tokenInfo.isExpired())) { - return getNewUpToken(file); - } else { - return that.token; - } + /** + * trim space beside text + * @param {String} untrimed string + * @return {String} trimed string + */ + this.trim = function (text) { + return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); }; - // getNewUptoken maybe called at Init Event or BeforeUpload Event - // case Init Event, the file param of getUptken will be set a null value - // if op.uptoken has value, set uptoken with op.uptoken - // else if op.uptoken_url has value, set uptoken from op.uptoken_url - // else if op.uptoken_func has value, set uptoken by result of op.uptoken_func - var getNewUpToken = function(file) { - if (op.uptoken) { - that.token = op.uptoken; - } else if (op.uptoken_url) { - logger.debug("get uptoken from: ", that.uptoken_url); - // TODO: use mOxie - var ajax = that.createAjax(); - ajax.open('GET', that.uptoken_url + '?' + (+ new Date()), false); - // ajax.setRequestHeader("If-Modified-Since", "0"); - // ajax.onreadystatechange = function() { - // if (ajax.readyState === 4 && ajax.status === 200) { - // var res = that.parseJSON(ajax.responseText); - // that.token = res.uptoken; - // } - // }; - ajax.send(); - if (ajax.status === 200) { - var res = that.parseJSON(ajax.responseText); - that.token = res.uptoken; - var segments = that.token.split(":"); - var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); - if (!that.tokenMap) { - that.tokenMap = {}; + /** + * create a uploader by QiniuJsSDK + * @param {object} options to create a new uploader + * @return {object} uploader + */ + this.uploader = function (op) { + + /********** inner function define start **********/ + + // according the different condition to reset chunk size + // and the upload strategy according with the chunk size + // when chunk size is zero will cause to direct upload + // see the statement binded on 'BeforeUpload' event + var reset_chunk_size = function () { + var ie = that.detectIEVersion(); + var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; + // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true + var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); + // case IE 9-,chunk_size is not empty and flash is included in runtimes + // set op.chunk_size to zero + //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { + if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { + // link: http://www.plupload.com/docs/Frequently-Asked-Questions#when-to-use-chunking-and-when-not + // when plupload chunk_size setting is't null ,it cause bug in ie8/9 which runs flash runtimes (not support html5) . + op.chunk_size = 0; + } else if (isSpecialSafari) { + // win7 safari / iOS7 safari have bug when in chunk upload mode + // reset chunk_size to 0 + // disable chunk in special version safari + op.chunk_size = 0; + } else { + BLOCK_BITS = 20; + MAX_CHUNK_SIZE = 4 << BLOCK_BITS; //4M + + chunk_size = plupload.parseSize(op.chunk_size); + if (chunk_size > MAX_CHUNK_SIZE) { + op.chunk_size = MAX_CHUNK_SIZE; } - var getTimestamp = function(time) { - return Math.ceil(time.getTime()/1000); - }; - var serverTime = getTimestamp(new Date(ajax.getResponseHeader("date"))); - var clientTime = getTimestamp(new Date()); - that.tokenInfo = { - serverDelay: clientTime - serverTime, - deadline: putPolicy.deadline, - isExpired: function() { - var leftTime = this.deadline - getTimestamp(new Date()) + this.serverDelay; - return leftTime < 600; + // qiniu service max_chunk_size is 4m + // reset chunk_size to max_chunk_size(4m) when chunk_size > 4m + } + // if op.chunk_size set 0 will be cause to direct upload + }; + + var getHosts = function (hosts) { + var result = []; + var uploadIndex = -1; + for (var i = 0; i < hosts.length; i++) { + var host = hosts[i]; + if (host.indexOf("upload") !== -1) { + uploadIndex = i; + } + if (host.indexOf('-H') === 0) { + result.push(host.split(' ')[2]); + } else { + result.push(host); + } + } + + if (uploadIndex !== -1) { + //make upload domains first + var uploadDomain = result[uploadIndex]; + result[uploadIndex] = result[0]; + result[0] = uploadDomain; + } + return result; + }; + + var getPutPolicy = function (uptoken) { + var segments = uptoken.split(":"); + var ak = segments[0]; + var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); + putPolicy.ak = ak; + if (putPolicy.scope.indexOf(":") >= 0) { + putPolicy.bucket = putPolicy.scope.split(":")[0]; + putPolicy.key = putPolicy.scope.split(":")[1]; + } else { + putPolicy.bucket = putPolicy.scope; + } + return putPolicy; + }; + + var getUpHosts = function (uptoken) { + var putPolicy = getPutPolicy(uptoken); + // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; + // IE9 does not support protocol relative url + var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; + logger.debug("putPolicy: ", putPolicy); + logger.debug("get uphosts from: ", uphosts_url); + var ie = that.detectIEVersion(); + var ajax; + if (ie && ie <= 9) { + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; + } else { + ajax = that.createAjax(); + } + ajax.open('GET', uphosts_url, false); + var onreadystatechange = function () { + logger.debug("ajax.readyState: ", ajax.readyState); + if (ajax.readyState === 4) { + logger.debug("ajax.status: ", ajax.status); + if (ajax.status < 400) { + var res = that.parseJSON(ajax.responseText); + qiniuUpHosts.http = getHosts(res.http.up); + qiniuUpHosts.https = getHosts(res.https.up); + logger.debug("get new uphosts: ", qiniuUpHosts); + that.resetUploadUrl(); + } else { + logger.error("get uphosts error: ", ajax.responseText); } - }; - logger.debug("get new uptoken: ", that.token); - logger.debug("get token info: ", that.tokenInfo); + } + }; + if (ie && ie <= 9) { + ajax.bind('readystatechange', onreadystatechange); } else { - logger.error("get uptoken error: ", ajax.responseText); + ajax.onreadystatechange = onreadystatechange; } - } else if (op.uptoken_func) { - logger.debug("get uptoken from uptoken_func"); - that.token = op.uptoken_func(file); - logger.debug("get new uptoken: ", that.token); - } else { - logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!"); - } - if (that.token) { - getUpHosts(that.token); - } - return that.token; - }; + ajax.send(); + // ajax.send(); + // if (ajax.status < 400) { + // var res = that.parseJSON(ajax.responseText); + // qiniuUpHosts.http = getHosts(res.http.up); + // qiniuUpHosts.https = getHosts(res.https.up); + // logger.debug("get new uphosts: ", qiniuUpHosts); + // that.resetUploadUrl(); + // } else { + // logger.error("get uphosts error: ", ajax.responseText); + // } + return; + }; - // get file key according with the user passed options - var getFileKey = function(up, file, func) { - // WARNING - // When you set the key in putPolicy by "scope": "bucket:key" - // You should understand the risk of override a file in the bucket - // So the code below that automatically get key from uptoken has been commented - // var putPolicy = getPutPolicy(that.token) - // if (putPolicy.key) { - // logger.debug("key is defined in putPolicy.scope: ", putPolicy.key) - // return putPolicy.key - // } - var key = '', - unique_names = false; - if (!op.save_key) { - unique_names = up.getOption && up.getOption('unique_names'); - unique_names = unique_names || (up.settings && up.settings.unique_names); - if (unique_names) { - var ext = that.getFileExtension(file.name); - key = ext ? file.id + '.' + ext : file.id; - } else if (typeof func === 'function') { - key = func(up, file); + var getUptoken = function (file) { + if (!that.token || (op.uptoken_url && that.tokenInfo.isExpired())) { + return getNewUpToken(file); } else { - key = file.name; + return that.token; } - } - return key; - }; + }; - /********** inner function define end **********/ + // getNewUptoken maybe called at Init Event or BeforeUpload Event + // case Init Event, the file param of getUptken will be set a null value + // if op.uptoken has value, set uptoken with op.uptoken + // else if op.uptoken_url has value, set uptoken from op.uptoken_url + // else if op.uptoken_func has value, set uptoken by result of op.uptoken_func + var getNewUpToken = function (file) { + if (op.uptoken) { + that.token = op.uptoken; + } else if (op.uptoken_url) { + logger.debug("get uptoken from: ", that.uptoken_url); + // TODO: use mOxie + var ajax = that.createAjax(); + ajax.open('GET', that.uptoken_url + '?' + (+new Date()), false); + // ajax.setRequestHeader("If-Modified-Since", "0"); + // ajax.onreadystatechange = function() { + // if (ajax.readyState === 4 && ajax.status === 200) { + // var res = that.parseJSON(ajax.responseText); + // that.token = res.uptoken; + // } + // }; + ajax.send(); + if (ajax.status === 200) { + var res = that.parseJSON(ajax.responseText); + that.token = res.uptoken; + var segments = that.token.split(":"); + var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); + if (!that.tokenMap) { + that.tokenMap = {}; + } + var getTimestamp = function (time) { + return Math.ceil(time.getTime() / 1000); + }; + var serverTime = getTimestamp(new Date(ajax.getResponseHeader("date"))); + var clientTime = getTimestamp(new Date()); + that.tokenInfo = { + serverDelay: clientTime - serverTime, + deadline: putPolicy.deadline, + isExpired: function () { + var leftTime = this.deadline - getTimestamp(new Date()) + this.serverDelay; + return leftTime < 600; + } + }; + logger.debug("get new uptoken: ", that.token); + logger.debug("get token info: ", that.tokenInfo); + } else { + logger.error("get uptoken error: ", ajax.responseText); + } + } else if (op.uptoken_func) { + logger.debug("get uptoken from uptoken_func"); + that.token = op.uptoken_func(file); + logger.debug("get new uptoken: ", that.token); + } else { + logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!"); + } + if (that.token) { + getUpHosts(that.token); + } + return that.token; + }; - if (op.log_level) { - logger.level = op.log_level; - } + // get file key according with the user passed options + var getFileKey = function (up, file, func) { + // WARNING + // When you set the key in putPolicy by "scope": "bucket:key" + // You should understand the risk of override a file in the bucket + // So the code below that automatically get key from uptoken has been commented + // var putPolicy = getPutPolicy(that.token) + // if (putPolicy.key) { + // logger.debug("key is defined in putPolicy.scope: ", putPolicy.key) + // return putPolicy.key + // } + var key = '', + unique_names = false; + if (!op.save_key) { + unique_names = up.getOption && up.getOption('unique_names'); + unique_names = unique_names || (up.settings && up.settings.unique_names); + if (unique_names) { + var ext = that.getFileExtension(file.name); + key = ext ? file.id + '.' + ext : file.id; + } else if (typeof func === 'function') { + key = func(up, file); + } else { + key = file.name; + } + } + return key; + }; - if (!op.domain) { - throw 'domain setting in options is required!'; - } + /********** inner function define end **********/ - if (!op.browse_button) { - throw 'browse_button setting in options is required!'; - } + if (op.log_level) { + logger.level = op.log_level; + } - if (!op.uptoken && !op.uptoken_url && !op.uptoken_func) { - throw 'one of [uptoken, uptoken_url, uptoken_func] settings in options is required!'; - } + if (!op.domain) { + throw 'domain setting in options is required!'; + } - logger.debug("init uploader start"); + if (!op.browse_button) { + throw 'browse_button setting in options is required!'; + } - logger.debug("environment: ", moxie.core.utils.Env); + if (!op.uptoken && !op.uptoken_url && !op.uptoken_func) { + throw 'one of [uptoken, uptoken_url, uptoken_func] settings in options is required!'; + } - logger.debug("userAgent: ", navigator.userAgent); + logger.debug("init uploader start"); - var option = {}; + logger.debug("environment: ", moxie.core.utils.Env); - // hold the handler from user passed options - var _Error_Handler = op.init && op.init.Error; - var _FileUploaded_Handler = op.init && op.init.FileUploaded; + logger.debug("userAgent: ", navigator.userAgent); - // replace the handler for intercept - op.init.Error = function() {}; - op.init.FileUploaded = function() {}; + var option = {}; - that.uptoken_url = op.uptoken_url; - that.token = ''; - that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : ''; - this.domain = op.domain; - // TODO: ctx is global in scope of a uploader instance - // this maybe cause error - var ctx = ''; - var speedCalInfo = { - isResumeUpload: false, - resumeFilesize: 0, - startTime: '', - currentTime: '' - }; + // hold the handler from user passed options + var _Error_Handler = op.init && op.init.Error; + var _FileUploaded_Handler = op.init && op.init.FileUploaded; - reset_chunk_size(); - logger.debug("invoke reset_chunk_size()"); - logger.debug("op.chunk_size: ", op.chunk_size); + // replace the handler for intercept + op.init.Error = function () {}; + op.init.FileUploaded = function () {}; - var defaultSetting = { - url: qiniuUploadUrl, - multipart_params: { - token: '' + that.uptoken_url = op.uptoken_url; + that.token = ''; + that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : ''; + this.domain = op.domain; + // TODO: ctx is global in scope of a uploader instance + // this maybe cause error + var ctx = ''; + var speedCalInfo = { + isResumeUpload: false, + resumeFilesize: 0, + startTime: '', + currentTime: '' + }; + + reset_chunk_size(); + logger.debug("invoke reset_chunk_size()"); + logger.debug("op.chunk_size: ", op.chunk_size); + + var defaultSetting = { + url: qiniuUploadUrl, + multipart_params: { + token: '' + } + }; + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + defaultSetting.multipart_params.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); } - }; - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - defaultSetting.multipart_params.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); - } - // compose options with user passed options and default setting - plupload.extend(option, op, defaultSetting); + // compose options with user passed options and default setting + plupload.extend(option, op, defaultSetting); - logger.debug("option: ", option); + logger.debug("option: ", option); - // create a new uploader with composed options - var uploader = new plupload.Uploader(option); + // create a new uploader with composed options + var uploader = new plupload.Uploader(option); - logger.debug("new plupload.Uploader(option)"); + logger.debug("new plupload.Uploader(option)"); - // bind getNewUpToken to 'Init' event - uploader.bind('Init', function(up, params) { - logger.debug("Init event activated"); - // if op.get_new_uptoken is not true - // invoke getNewUptoken when uploader init - // else - // getNewUptoken everytime before a new file upload - if(!op.get_new_uptoken){ - getNewUpToken(null); - } - //getNewUpToken(null); - }); - - 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); - - // detect is iOS - var is_ios = function (){ - if(moxie.core.utils.Env.OS.toLowerCase()==="ios") { - return true; - } else { - return false; + // bind getNewUpToken to 'Init' event + uploader.bind('Init', function (up, params) { + logger.debug("Init event activated"); + // if op.get_new_uptoken is not true + // invoke getNewUptoken when uploader init + // else + // getNewUptoken everytime before a new file upload + if (!op.get_new_uptoken) { + getNewUpToken(null); } - }; + //getNewUpToken(null); + }); - // if current env os is iOS change file name to [time].[ext] - if (is_ios()) { - for (var i = 0; i < files.length; i++) { - var file = files[i]; - var ext = that.getFileExtension(file.name); - file.name = file.id + "." + ext; - } - } + 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); + + // detect is iOS + var is_ios = function () { + if (moxie.core.utils.Env.OS.toLowerCase() === "ios") { + return true; + } else { + return false; + } + }; - if (auto_start) { - 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 = ''; - - if(op.get_new_uptoken){ - getNewUpToken(file); - } + // if current env os is iOS change file name to [time].[ext] + if (is_ios()) { + for (var i = 0; i < files.length; i++) { + var file = files[i]; + var ext = that.getFileExtension(file.name); + file.name = file.id + "." + ext; + } + } - var directUpload = function(up, file, func) { - speedCalInfo.startTime = new Date().getTime(); - var multipart_params_obj; - if (op.save_key) { - multipart_params_obj = { - 'token': that.token - }; - } else { - multipart_params_obj = { - 'key': getFileKey(up, file, func), - 'token': that.token - }; + if (auto_start) { + 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); + // }); } - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - multipart_params_obj.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); + 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 = ''; + + if (op.get_new_uptoken) { + getNewUpToken(file); } - logger.debug("directUpload multipart_params_obj: ", multipart_params_obj); + var directUpload = function (up, file, func) { + speedCalInfo.startTime = new Date().getTime(); + var multipart_params_obj; + if (op.save_key) { + multipart_params_obj = { + 'token': that.token + }; + } else { + multipart_params_obj = { + 'key': getFileKey(up, file, func), + 'token': that.token + }; + } + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + multipart_params_obj.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); + } - var x_vars = op.x_vars; - if (x_vars !== undefined && typeof x_vars === 'object') { - for (var x_key in x_vars) { - if (x_vars.hasOwnProperty(x_key)) { - if (typeof x_vars[x_key] === 'function') { - multipart_params_obj['x:' + x_key] = x_vars[x_key](up, file); - } else if (typeof x_vars[x_key] !== 'object') { - multipart_params_obj['x:' + x_key] = x_vars[x_key]; + 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) { + if (x_vars.hasOwnProperty(x_key)) { + if (typeof x_vars[x_key] === 'function') { + multipart_params_obj['x:' + x_key] = x_vars[x_key](up, file); + } else if (typeof x_vars[x_key] !== 'object') { + multipart_params_obj['x:' + x_key] = x_vars[x_key]; + } } } } - } - up.setOption({ - 'url': qiniuUploadUrl, - 'multipart': true, - 'chunk_size': is_android_weixin_or_qq() ? op.max_file_size : undefined, - 'multipart_params': multipart_params_obj - }); - }; + up.setOption({ + 'url': qiniuUploadUrl, + 'multipart': true, + 'chunk_size': is_android_weixin_or_qq() ? op.max_file_size : undefined, + 'multipart_params': multipart_params_obj + }); + }; - // 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.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase()==="android") { - return true; - } else { - return false; - } - }; + // 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.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase() === "android") { + return true; + } else { + return false; + } + }; - var chunk_size = up.getOption && up.getOption('chunk_size'); - chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + 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); + logger.debug("uploader.runtime: ", uploader.runtime); + logger.debug("chunk_size: ", chunk_size); - // TODO: flash support chunk upload - 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 { - // TODO: need a polifill to make it work in IE 9- - // ISSUE: if file.name is existed in localStorage - // but not the same file maybe cause error - var localFileInfo = localStorage.getItem(file.name); - var blockSize = chunk_size; - if (localFileInfo) { - // TODO: although only the html5 runtime will enter this statement - // but need uniform way to make convertion between string and json - localFileInfo = that.parseJSON(localFileInfo); - var now = (new Date()).getTime(); - var before = localFileInfo.time || 0; - var aDay = 24 * 60 * 60 * 1000; // milliseconds of one day - // if the last upload time is within one day - // will upload continuously follow the last breakpoint - // else - // will reupload entire file - if (now - before < aDay) { - - if (localFileInfo.percent !== 100) { - if (file.size === localFileInfo.total) { - // TODO: if file.name and file.size is the same - // but not the same file will cause error - file.percent = localFileInfo.percent; - file.loaded = localFileInfo.offset; - ctx = localFileInfo.ctx; - - // set speed info - speedCalInfo.isResumeUpload = true; - speedCalInfo.resumeFilesize = localFileInfo.offset; - - // set block size - if (localFileInfo.offset + blockSize > file.size) { - blockSize = file.size - localFileInfo.offset; + // TODO: flash support chunk upload + 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 { + // TODO: need a polifill to make it work in IE 9- + // ISSUE: if file.name is existed in localStorage + // but not the same file maybe cause error + var localFileInfo = localStorage.getItem(file.name); + var blockSize = chunk_size; + if (localFileInfo) { + // TODO: although only the html5 runtime will enter this statement + // but need uniform way to make convertion between string and json + localFileInfo = that.parseJSON(localFileInfo); + var now = (new Date()).getTime(); + var before = localFileInfo.time || 0; + var aDay = 24 * 60 * 60 * 1000; // milliseconds of one day + // if the last upload time is within one day + // will upload continuously follow the last breakpoint + // else + // will reupload entire file + if (now - before < aDay) { + + if (localFileInfo.percent !== 100) { + if (file.size === localFileInfo.total) { + // TODO: if file.name and file.size is the same + // but not the same file will cause error + file.percent = localFileInfo.percent; + file.loaded = localFileInfo.offset; + ctx = localFileInfo.ctx; + + // set speed info + speedCalInfo.isResumeUpload = true; + speedCalInfo.resumeFilesize = localFileInfo.offset; + + // set block size + if (localFileInfo.offset + blockSize > file.size) { + blockSize = file.size - localFileInfo.offset; + } + } else { + // remove file info when file.size is conflict with file info + localStorage.removeItem(file.name); } + } else { - // remove file info when file.size is conflict with file info + // remove file info when upload percent is 100% + // avoid 499 bug localStorage.removeItem(file.name); } - } else { - // remove file info when upload percent is 100% - // avoid 499 bug + // remove file info when last upload time is over one day localStorage.removeItem(file.name); } - } else { - // remove file info when last upload time is over one day - localStorage.removeItem(file.name); } + speedCalInfo.startTime = new Date().getTime(); + var multipart_params_obj = {}; + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + multipart_params_obj.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); + } + // TODO: to support bput + // http://developer.qiniu.com/docs/v6/api/reference/up/bput.html + up.setOption({ + 'url': qiniuUploadUrl + '/mkblk/' + blockSize, + 'multipart': false, + 'chunk_size': chunk_size, + 'required_features': "chunks", + 'headers': { + 'Authorization': 'UpToken ' + getUptoken(file) + }, + 'multipart_params': multipart_params_obj + }); } - speedCalInfo.startTime = new Date().getTime(); - var multipart_params_obj = {}; - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - multipart_params_obj.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); - } - // TODO: to support bput - // http://developer.qiniu.com/docs/v6/api/reference/up/bput.html + } else { + logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !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; + if (speedCalInfo.isResumeUpload) { + fileUploaded = file.loaded - speedCalInfo.resumeFilesize; + } + 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"); + logger.debug("ChunkUploaded file: ", file); + logger.debug("ChunkUploaded info: ", info); + var res = that.parseJSON(info.response); + logger.debug("ChunkUploaded res: ", res); + // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' + ctx = ctx ? ctx + ',' + res.ctx : res.ctx; + var leftSize = info.total - info.offset; + var chunk_size = up.getOption && up.getOption('chunk_size'); + chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + if (leftSize < chunk_size) { up.setOption({ - 'url': qiniuUploadUrl + '/mkblk/' + blockSize, - 'multipart': false, - 'chunk_size': chunk_size, - 'required_features': "chunks", - 'headers': { - 'Authorization': 'UpToken ' + getUptoken(file) - }, - 'multipart_params': multipart_params_obj + 'url': qiniuUploadUrl + '/mkblk/' + leftSize }); + logger.debug("up.setOption url: ", qiniuUploadUrl + '/mkblk/' + leftSize); } - } else { - logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !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; - if (speedCalInfo.isResumeUpload) { - fileUploaded = file.loaded - speedCalInfo.resumeFilesize; - } - 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"); - logger.debug("ChunkUploaded file: ", file); - logger.debug("ChunkUploaded info: ", info); - var res = that.parseJSON(info.response); - logger.debug("ChunkUploaded res: ", res); - // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' - ctx = ctx ? ctx + ',' + res.ctx : res.ctx; - var leftSize = info.total - info.offset; - var chunk_size = up.getOption && up.getOption('chunk_size'); - chunk_size = chunk_size || (up.settings && up.settings.chunk_size); - if (leftSize < chunk_size) { up.setOption({ - 'url': qiniuUploadUrl + '/mkblk/' + leftSize + 'headers': { + 'Authorization': 'UpToken ' + getUptoken(file) + } }); - logger.debug("up.setOption url: ", qiniuUploadUrl + '/mkblk/' + leftSize); - } - up.setOption({ - 'headers': { - 'Authorization': 'UpToken ' + getUptoken(file) - } + localStorage.setItem(file.name, that.stringifyJSON({ + ctx: ctx, + percent: file.percent, + total: info.total, + offset: info.offset, + time: (new Date()).getTime() + })); }); - localStorage.setItem(file.name, that.stringifyJSON({ - ctx: ctx, - percent: file.percent, - total: info.total, - offset: info.offset, - time: (new Date()).getTime() - })); - }); - - logger.debug("bind ChunkUploaded event"); - - var retries = qiniuUploadUrls.length; - - // if error is unkown switch upload url and retry - var unknow_error_retry = function(file){ - if (retries-- > 0) { - setTimeout(function(){ - that.resetUploadUrl(); - file.status = plupload.QUEUED; - uploader.stop(); - uploader.start(); - }, 0); - return true; - }else{ - retries = qiniuUploadUrls.length; - return false; - } - }; - // 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) { - switch (err.code) { - case plupload.FAILED: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.FILE_SIZE_ERROR: - var max_file_size = up.getOption && up.getOption('max_file_size'); - max_file_size = max_file_size || (up.settings && up.settings.max_file_size); - errTip = '浏览器最大可上传' + max_file_size + '。更大文件请使用命令行工具。'; - break; - case plupload.FILE_EXTENSION_ERROR: - errTip = '文件验证失败。请稍后重试。'; - break; - case plupload.HTTP_ERROR: - if (err.response === '') { - // Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE - errTip = err.message || '未知网络错误。'; - if (!unknow_error_retry(file)) { - return; - } + logger.debug("bind ChunkUploaded event"); + + var retries = qiniuUploadUrls.length; + + // if error is unkown switch upload url and retry + var unknow_error_retry = function (file) { + if (retries-- > 0) { + setTimeout(function () { + that.resetUploadUrl(); + file.status = plupload.QUEUED; + uploader.stop(); + uploader.start(); + }, 0); + return true; + } else { + retries = qiniuUploadUrls.length; + return false; + } + }; + + // 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) { + switch (err.code) { + case plupload.FAILED: + errTip = '上传失败。请稍后再试。'; break; - } - var errorObj = that.parseJSON(err.response); - var errorText = errorObj.error; - switch (err.status) { - case 400: - errTip = "请求报文格式错误。"; - break; - case 401: - errTip = "客户端认证授权失败。请重试或提交反馈。"; - break; - case 405: - errTip = "客户端请求错误。请重试或提交反馈。"; - break; - case 579: - errTip = "资源上传成功,但回调失败。"; - break; - case 599: - errTip = "网络连接异常。请重试或提交反馈。"; - if (!unknow_error_retry(file)) { - return; - } - break; - case 614: - errTip = "文件已存在。"; - try { - errorObj = that.parseJSON(errorObj.error); - errorText = errorObj.error || 'file exists'; - } catch (e) { - errorText = errorObj.error || 'file exists'; - } - break; - case 631: - errTip = "指定空间不存在。"; - break; - case 701: - errTip = "上传数据块校验出错。请重试或提交反馈。"; - break; - default: - errTip = "未知错误。"; + case plupload.FILE_SIZE_ERROR: + var max_file_size = up.getOption && up.getOption('max_file_size'); + max_file_size = max_file_size || (up.settings && up.settings.max_file_size); + errTip = '浏览器最大可上传' + max_file_size + '。更大文件请使用命令行工具。'; + break; + case plupload.FILE_EXTENSION_ERROR: + errTip = '文件验证失败。请稍后重试。'; + break; + case plupload.HTTP_ERROR: + if (err.response === '') { + // Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE + errTip = err.message || '未知网络错误。'; if (!unknow_error_retry(file)) { return; } break; - } - errTip = errTip + '(' + err.status + ':' + errorText + ')'; - break; - case plupload.SECURITY_ERROR: - errTip = '安全配置错误。请联系网站管理员。'; - break; - case plupload.GENERIC_ERROR: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.IO_ERROR: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.INIT_ERROR: - errTip = '网站配置错误。请联系网站管理员。'; - uploader.destroy(); - break; - default: - errTip = err.message + err.details; - if (!unknow_error_retry(file)) { - return; - } - break; - } - if (_Error_Handler) { - _Error_Handler(up, err, errTip); - } - } - up.refresh(); // Reposition Flash/Silverlight - }; - })(_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"); - logger.debug("FileUploaded file: ", file); - logger.debug("FileUploaded info: ", info); - var last_step = function(up, file, info) { - logger.debug("FileUploaded last step:",info); - if (op.downtoken_url) { - // if op.dowontoken_url is not empty - // need get downtoken before invoke the _FileUploaded_Handler - 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, that.parseJSON(info.response), res_downtoken); - if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); - } - } else { - uploader.trigger('Error', { - status: ajax_downtoken.status, - response: ajax_downtoken.responseText, - file: file, - code: plupload.HTTP_ERROR - }); } - } - }; - ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); - } else if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, info); + var errorObj = that.parseJSON(err.response); + var errorText = errorObj.error; + switch (err.status) { + case 400: + errTip = "请求报文格式错误。"; + break; + case 401: + errTip = "客户端认证授权失败。请重试或提交反馈。"; + break; + case 405: + errTip = "客户端请求错误。请重试或提交反馈。"; + break; + case 579: + errTip = "资源上传成功,但回调失败。"; + break; + case 599: + errTip = "网络连接异常。请重试或提交反馈。"; + if (!unknow_error_retry(file)) { + return; + } + break; + case 614: + errTip = "文件已存在。"; + try { + errorObj = that.parseJSON(errorObj.error); + errorText = errorObj.error || 'file exists'; + } catch (e) { + errorText = errorObj.error || 'file exists'; + } + break; + case 631: + errTip = "指定空间不存在。"; + break; + case 701: + errTip = "上传数据块校验出错。请重试或提交反馈。"; + break; + default: + errTip = "未知错误。"; + if (!unknow_error_retry(file)) { + return; + } + break; + } + errTip = errTip + '(' + err.status + ':' + errorText + ')'; + break; + case plupload.SECURITY_ERROR: + errTip = '安全配置错误。请联系网站管理员。'; + break; + case plupload.GENERIC_ERROR: + errTip = '上传失败。请稍后再试。'; + break; + case plupload.IO_ERROR: + errTip = '上传失败。请稍后再试。'; + break; + case plupload.INIT_ERROR: + errTip = '网站配置错误。请联系网站管理员。'; + uploader.destroy(); + break; + default: + errTip = err.message + err.details; + if (!unknow_error_retry(file)) { + return; + } + break; + } + if (_Error_Handler) { + _Error_Handler(up, err, errTip); + } } + up.refresh(); // Reposition Flash/Silverlight }; + })(_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"); + logger.debug("FileUploaded file: ", file); + logger.debug("FileUploaded info: ", info); + var last_step = function (up, file, info) { + logger.debug("FileUploaded last step:", info); + if (op.downtoken_url) { + // if op.dowontoken_url is not empty + // need get downtoken before invoke the _FileUploaded_Handler + 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, that.parseJSON(info.response), res_downtoken); + if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); + } + } else { + uploader.trigger('Error', { + status: ajax_downtoken.status, + response: ajax_downtoken.responseText, + file: file, + code: plupload.HTTP_ERROR + }); + } + } + }; + ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); + } else if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, info); + } + }; - var res = that.parseJSON(info.response); - ctx = ctx ? ctx : res.ctx; - // if ctx is not empty - // that means the upload strategy is chunk upload - // before the invoke the last_step - // we need request the mkfile to compose all uploaded chunks - // else - // invoke the last_step - logger.debug("ctx: ", ctx); - if (ctx) { - var key = ''; - logger.debug("save_key: ", op.save_key); - if (!op.save_key) { - key = getFileKey(up, file, that.key_handler); - key = key ? '/key/' + that.URLSafeBase64Encode(key) : ''; - } - - var fname = '/fname/' + that.URLSafeBase64Encode(file.name); + var res = that.parseJSON(info.response); + ctx = ctx ? ctx : res.ctx; + // if ctx is not empty + // that means the upload strategy is chunk upload + // before the invoke the last_step + // we need request the mkfile to compose all uploaded chunks + // else + // invoke the last_step + logger.debug("ctx: ", ctx); + if (ctx) { + var key = ''; + logger.debug("save_key: ", op.save_key); + if (!op.save_key) { + key = getFileKey(up, file, that.key_handler); + key = key ? '/key/' + that.URLSafeBase64Encode(key) : ''; + } - logger.debug("op.x_vars: ", op.x_vars); - var x_vars = op.x_vars, - x_val = '', - x_vars_url = ''; - if (x_vars !== undefined && typeof x_vars === 'object') { - for (var x_key in x_vars) { - if (x_vars.hasOwnProperty(x_key)) { - if (typeof x_vars[x_key] === 'function') { - x_val = that.URLSafeBase64Encode(x_vars[x_key](up, file)); - } else if (typeof x_vars[x_key] !== 'object') { - x_val = that.URLSafeBase64Encode(x_vars[x_key]); + var fname = '/fname/' + that.URLSafeBase64Encode(file.name); + + logger.debug("op.x_vars: ", op.x_vars); + var x_vars = op.x_vars, + x_val = '', + x_vars_url = ''; + if (x_vars !== undefined && typeof x_vars === 'object') { + for (var x_key in x_vars) { + if (x_vars.hasOwnProperty(x_key)) { + if (typeof x_vars[x_key] === 'function') { + x_val = that.URLSafeBase64Encode(x_vars[x_key](up, file)); + } else if (typeof x_vars[x_key] !== 'object') { + x_val = that.URLSafeBase64Encode(x_vars[x_key]); + } + x_vars_url += '/x:' + x_key + '/' + x_val; } - x_vars_url += '/x:' + x_key + '/' + x_val; } } - } - var url = qiniuUploadUrl + '/mkfile/' + file.size + key + fname + x_vars_url; + var url = qiniuUploadUrl + '/mkfile/' + file.size + key + fname + x_vars_url; - var ie = that.detectIEVersion(); - var ajax; - if (ie && ie <= 9) { - ajax = new moxie.xhr.XMLHttpRequest(); - moxie.core.utils.Env.swf_url = op.flash_swf_url; - }else{ - ajax = that.createAjax(); - } - ajax.open('POST', url, true); - ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); - ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); - var onreadystatechange = function(){ - logger.debug("ajax.readyState: ", ajax.readyState); - if (ajax.readyState === 4) { - localStorage.removeItem(file.name); - var ajaxInfo; - if (ajax.status === 200) { - ajaxInfo = { - status: ajax.status, - response: ajax.responseText, - responseHeaders: ajax.getAllResponseHeaders(), - }; - logger.debug("mkfile is success: ", ajaxInfo); - last_step(up, file, ajaxInfo); - } else { - ajaxInfo = { - status: ajax.status, - response: ajax.responseText, - file: file, - code: -200, - responseHeaders: ajax.getAllResponseHeaders() - }; - logger.debug("mkfile is error: ", ajaxInfo); - uploader.trigger('Error', ajaxInfo); + var ie = that.detectIEVersion(); + var ajax; + if (ie && ie <= 9) { + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; + } else { + ajax = that.createAjax(); + } + ajax.open('POST', url, true); + ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); + ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + var onreadystatechange = function () { + logger.debug("ajax.readyState: ", ajax.readyState); + if (ajax.readyState === 4) { + localStorage.removeItem(file.name); + var ajaxInfo; + if (ajax.status === 200) { + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + responseHeaders: ajax.getAllResponseHeaders(), + }; + logger.debug("mkfile is success: ", ajaxInfo); + last_step(up, file, ajaxInfo); + } else { + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + file: file, + code: -200, + responseHeaders: ajax.getAllResponseHeaders() + }; + logger.debug("mkfile is error: ", ajaxInfo); + uploader.trigger('Error', ajaxInfo); + } } + }; + if (ie && ie <= 9) { + ajax.bind('readystatechange', onreadystatechange); + } else { + ajax.onreadystatechange = onreadystatechange; } - }; - if (ie && ie <= 9) { - ajax.bind('readystatechange', onreadystatechange); - }else{ - ajax.onreadystatechange = onreadystatechange; + ajax.send(ctx); + logger.debug("mkfile: ", url); + } else { + last_step(up, file, info); } - ajax.send(ctx); - logger.debug("mkfile: ", url); - } else { - last_step(up, file, info); - } - }; - })(_FileUploaded_Handler)); - - logger.debug("bind FileUploaded event"); + }; + })(_FileUploaded_Handler)); - // init uploader - uploader.init(); - logger.debug("invoke uploader.init()"); + logger.debug("bind FileUploaded event"); - logger.debug("init uploader end"); + // init uploader + uploader.init(); + logger.debug("invoke uploader.init()"); - return uploader; - }; + logger.debug("init uploader end"); - /** - * get url by key - * @param {String} key of file - * @return {String} url of file - */ - this.getUrl = function(key) { - if (!key) { - return false; - } - key = encodeURI(key); - var domain = this.domain; - if (domain.slice(domain.length - 1) !== '/') { - domain = domain + '/'; - } - return domain + key; - }; + return uploader; + }; - /** - * invoke the imageView2 api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.imageView2 = function(op, key) { + /** + * get url by key + * @param {String} key of file + * @return {String} url of file + */ + this.getUrl = function (key) { + if (!key) { + return false; + } + key = encodeURI(key); + var domain = this.domain; + if (domain.slice(domain.length - 1) !== '/') { + domain = domain + '/'; + } + return domain + key; + }; - if (!/^\d$/.test(op.mode)) { - return false; - } + /** + * invoke the imageView2 api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.imageView2 = function (op, key) { - var mode = op.mode, - w = op.w || '', - h = op.h || '', - q = op.q || '', - format = op.format || ''; + if (!/^\d$/.test(op.mode)) { + return false; + } - if (!w && !h) { - return false; - } + var mode = op.mode, + w = op.w || '', + h = op.h || '', + q = op.q || '', + format = op.format || ''; - var imageUrl = 'imageView2/' + mode; - imageUrl += w ? '/w/' + w : ''; - imageUrl += h ? '/h/' + h : ''; - imageUrl += q ? '/q/' + q : ''; - imageUrl += format ? '/format/' + format : ''; - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + if (!w && !h) { + return false; + } - /** - * invoke the imageMogr2 api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.imageMogr2 = function(op, key) { - var auto_orient = op['auto-orient'] || '', - thumbnail = op.thumbnail || '', - strip = op.strip || '', - gravity = op.gravity || '', - crop = op.crop || '', - quality = op.quality || '', - rotate = op.rotate || '', - format = op.format || '', - blur = op.blur || ''; - //Todo check option - - var imageUrl = 'imageMogr2'; - - imageUrl += auto_orient ? '/auto-orient' : ''; - imageUrl += thumbnail ? '/thumbnail/' + thumbnail : ''; - imageUrl += strip ? '/strip' : ''; - imageUrl += gravity ? '/gravity/' + gravity : ''; - imageUrl += quality ? '/quality/' + quality : ''; - imageUrl += crop ? '/crop/' + crop : ''; - imageUrl += rotate ? '/rotate/' + rotate : ''; - imageUrl += format ? '/format/' + format : ''; - imageUrl += blur ? '/blur/' + blur : ''; - - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + var imageUrl = 'imageView2/' + mode; + imageUrl += w ? '/w/' + w : ''; + imageUrl += h ? '/h/' + h : ''; + imageUrl += q ? '/q/' + q : ''; + imageUrl += format ? '/format/' + format : ''; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - /** - * invoke the watermark api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.watermark = function(op, key) { - var mode = op.mode; - if (!mode) { - return false; - } + /** + * invoke the imageMogr2 api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.imageMogr2 = function (op, key) { + var auto_orient = op['auto-orient'] || '', + thumbnail = op.thumbnail || '', + strip = op.strip || '', + gravity = op.gravity || '', + crop = op.crop || '', + quality = op.quality || '', + rotate = op.rotate || '', + format = op.format || '', + blur = op.blur || ''; + //Todo check option + + var imageUrl = 'imageMogr2'; + + imageUrl += auto_orient ? '/auto-orient' : ''; + imageUrl += thumbnail ? '/thumbnail/' + thumbnail : ''; + imageUrl += strip ? '/strip' : ''; + imageUrl += gravity ? '/gravity/' + gravity : ''; + imageUrl += quality ? '/quality/' + quality : ''; + imageUrl += crop ? '/crop/' + crop : ''; + imageUrl += rotate ? '/rotate/' + rotate : ''; + imageUrl += format ? '/format/' + format : ''; + imageUrl += blur ? '/blur/' + blur : ''; - var imageUrl = 'watermark/' + mode; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - if (mode === 1) { - var image = op.image || ''; - if (!image) { + /** + * invoke the watermark api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.watermark = function (op, key) { + var mode = op.mode; + if (!mode) { return false; } - imageUrl += image ? '/image/' + this.URLSafeBase64Encode(image) : ''; - } else if (mode === 2) { - var text = op.text ? op.text : '', - font = op.font ? op.font : '', - fontsize = op.fontsize ? op.fontsize : '', - fill = op.fill ? op.fill : ''; - if (!text) { + + var imageUrl = 'watermark/' + mode; + + if (mode === 1) { + var image = op.image || ''; + if (!image) { + return false; + } + imageUrl += image ? '/image/' + this.URLSafeBase64Encode(image) : ''; + } else if (mode === 2) { + var text = op.text ? op.text : '', + font = op.font ? op.font : '', + fontsize = op.fontsize ? op.fontsize : '', + fill = op.fill ? op.fill : ''; + if (!text) { + return false; + } + imageUrl += text ? '/text/' + this.URLSafeBase64Encode(text) : ''; + imageUrl += font ? '/font/' + this.URLSafeBase64Encode(font) : ''; + imageUrl += fontsize ? '/fontsize/' + fontsize : ''; + imageUrl += fill ? '/fill/' + this.URLSafeBase64Encode(fill) : ''; + } else { + // Todo mode3 return false; } - imageUrl += text ? '/text/' + this.URLSafeBase64Encode(text) : ''; - imageUrl += font ? '/font/' + this.URLSafeBase64Encode(font) : ''; - imageUrl += fontsize ? '/fontsize/' + fontsize : ''; - imageUrl += fill ? '/fill/' + this.URLSafeBase64Encode(fill) : ''; - } else { - // Todo mode3 - return false; - } - var dissolve = op.dissolve || '', - gravity = op.gravity || '', - dx = op.dx || '', - dy = op.dy || ''; + var dissolve = op.dissolve || '', + gravity = op.gravity || '', + dx = op.dx || '', + dy = op.dy || ''; - imageUrl += dissolve ? '/dissolve/' + dissolve : ''; - imageUrl += gravity ? '/gravity/' + gravity : ''; - imageUrl += dx ? '/dx/' + dx : ''; - imageUrl += dy ? '/dy/' + dy : ''; + imageUrl += dissolve ? '/dissolve/' + dissolve : ''; + imageUrl += gravity ? '/gravity/' + gravity : ''; + imageUrl += dx ? '/dx/' + dx : ''; + imageUrl += dy ? '/dy/' + dy : ''; - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - /** - * invoke the imageInfo api of Qiniu - * @param {String} key of file - * @return {Object} image info - */ - this.imageInfo = function(key) { - if (!key) { - return false; - } - var url = this.getUrl(key) + '?imageInfo'; - var xhr = this.createAjax(); - var info; - var that = this; - xhr.open('GET', url, false); - xhr.onreadystatechange = function() { - if (xhr.readyState === 4 && xhr.status === 200) { - info = that.parseJSON(xhr.responseText); + /** + * invoke the imageInfo api of Qiniu + * @param {String} key of file + * @return {Object} image info + */ + this.imageInfo = function (key) { + if (!key) { + return false; } + var url = this.getUrl(key) + '?imageInfo'; + var xhr = this.createAjax(); + var info; + var that = this; + xhr.open('GET', url, false); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && xhr.status === 200) { + info = that.parseJSON(xhr.responseText); + } + }; + xhr.send(); + return info; }; - xhr.send(); - return info; - }; - /** - * invoke the exif api of Qiniu - * @param {String} key of file - * @return {Object} image exif - */ - this.exif = function(key) { - if (!key) { - return false; - } - var url = this.getUrl(key) + '?exif'; - var xhr = this.createAjax(); - var info; - var that = this; - xhr.open('GET', url, false); - xhr.onreadystatechange = function() { - if (xhr.readyState === 4 && xhr.status === 200) { - info = that.parseJSON(xhr.responseText); + /** + * invoke the exif api of Qiniu + * @param {String} key of file + * @return {Object} image exif + */ + this.exif = function (key) { + if (!key) { + return false; } + var url = this.getUrl(key) + '?exif'; + var xhr = this.createAjax(); + var info; + var that = this; + xhr.open('GET', url, false); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && xhr.status === 200) { + info = that.parseJSON(xhr.responseText); + } + }; + xhr.send(); + return info; }; - xhr.send(); - return info; - }; - /** - * invoke the exif or imageInfo api of Qiniu - * according with type param - * @param {String} ['exif'|'imageInfo']type of info - * @param {String} key of file - * @return {Object} image exif or info - */ - this.get = function(type, key) { - if (!key || !type) { + /** + * invoke the exif or imageInfo api of Qiniu + * according with type param + * @param {String} ['exif'|'imageInfo']type of info + * @param {String} key of file + * @return {Object} image exif or info + */ + this.get = function (type, key) { + if (!key || !type) { + return false; + } + if (type === 'exif') { + return this.exif(key); + } else if (type === 'imageInfo') { + return this.imageInfo(key); + } return false; - } - if (type === 'exif') { - return this.exif(key); - } else if (type === 'imageInfo') { - return this.imageInfo(key); - } - return false; - }; + }; - /** - * invoke api of Qiniu like a pipeline - * @param {Array of Object} params of a series api call - * each object in array is options of api which name is set as 'fop' property - * each api's output will be next api's input - * @param {String} key of file - * @return {String|Boolean} url of processed image - */ - this.pipeline = function(arr, key) { - var isArray = Object.prototype.toString.call(arr) === '[object Array]'; - var option, errOp, imageUrl = ''; - if (isArray) { - for (var i = 0, len = arr.length; i < len; i++) { - option = arr[i]; - if (!option.fop) { - return false; - } - switch (option.fop) { - case 'watermark': - imageUrl += this.watermark(option) + '|'; - break; - case 'imageView2': - imageUrl += this.imageView2(option) + '|'; - break; - case 'imageMogr2': - imageUrl += this.imageMogr2(option) + '|'; - break; - default: - errOp = true; - break; - } - if (errOp) { - return false; + /** + * invoke api of Qiniu like a pipeline + * @param {Array of Object} params of a series api call + * each object in array is options of api which name is set as 'fop' property + * each api's output will be next api's input + * @param {String} key of file + * @return {String|Boolean} url of processed image + */ + this.pipeline = function (arr, key) { + var isArray = Object.prototype.toString.call(arr) === '[object Array]'; + var option, errOp, imageUrl = ''; + if (isArray) { + for (var i = 0, len = arr.length; i < len; i++) { + option = arr[i]; + if (!option.fop) { + return false; + } + switch (option.fop) { + case 'watermark': + imageUrl += this.watermark(option) + '|'; + break; + case 'imageView2': + imageUrl += this.imageView2(option) + '|'; + break; + case 'imageMogr2': + imageUrl += this.imageMogr2(option) + '|'; + break; + default: + errOp = true; + break; + } + if (errOp) { + return false; + } } - } - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - var length = imageUrl.length; - if (imageUrl.slice(length - 1) === '|') { - imageUrl = imageUrl.slice(0, length - 1); + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + var length = imageUrl.length; + if (imageUrl.slice(length - 1) === '|') { + imageUrl = imageUrl.slice(0, length - 1); + } } + return imageUrl; } - return imageUrl; - } - return false; - }; -} + return false; + }; + } -var Qiniu = new QiniuJsSDK(); + var Qiniu = new QiniuJsSDK(); -global.Qiniu = Qiniu; -global.QiniuJsSDK = QiniuJsSDK; + global.Qiniu = Qiniu; + global.QiniuJsSDK = QiniuJsSDK; -})( window ); +})(window); \ No newline at end of file From 53ff468a4d5d05ea6aa4e9444e087a316e363df5 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Fri, 30 Jun 2017 17:22:19 +0800 Subject: [PATCH 19/44] add collects --- src/qiniu.js | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/qiniu.js b/src/qiniu.js index 18598065..e5e7a0a6 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -172,6 +172,9 @@ var changeUrlTimes = 0; + // api to collect upload logs + var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/2"; + /** * reset upload url * if current page protocal is https @@ -519,7 +522,6 @@ } return '{' + string.join(',') + '}'; } - break; case 'number': return obj; case false: @@ -765,6 +767,33 @@ } return key; }; + + /** + * send logs to statistics server + * + * @param {number} code status code + * @param {string} req_id request id + * @param {number} file_size file total size (bytes) + * @param {number} sent_size uploaded size (bytes) + * @param {string} sdk_runtime js sdk runtime: html5, html4, flash + */ + var sendLogToServer = function (code, req_id, file_size, sent_size, sdk_runtime) { + logger.debug("[STATISTICS] send log to server", arguments) + // TODO add send queue + // var ajax = that.createAjax(); + // ajax.open('POST', qiniuCollectUploadLogUrl, true); + // ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + // ajax.onreadystatechange = function () { + // if (ajax.readyState === 4) { + // if (ajax.status === 200) { + // logger.debug("successfully report log to server") + // } else { + // logger.debug("report log to server failed") + // } + // } + // }; + // ajax.send(arguments.join(",")); + } /********** inner function define end **********/ @@ -1232,6 +1261,11 @@ } } up.refresh(); // Reposition Flash/Silverlight + + // add send log for upload error + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] + var req_id = matchedGroups[2] + sendLogToServer(err.code, req_id, err.file.size, err.file.size * (err.file.percent / 100), up.runtime); }; })(_Error_Handler)); @@ -1370,11 +1404,26 @@ last_step(up, file, info); } + // TODO status code ? send log for upload complete + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2] + sendLogToServer(info.status, req_id, file.size, file.size, up.runtime); }; })(_FileUploaded_Handler)); logger.debug("bind FileUploaded event"); + // bind 'FilesRemoved' event + // intercept the cancel of upload + // used to send statistics log to server + uploader.bind('FilesRemoved', function (up, files) { + // TODO status code ? add cancel log + for (var i = 0; i < files.length; i++) { + sendLogToServer(-1, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); + } + }) + + logger.debug("bind FilesRemoved event"); + // init uploader uploader.init(); logger.debug("invoke uploader.init()"); From 4d7d4abc170c0d7a5b145472ff4e50b471fd621c Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Fri, 30 Jun 2017 17:46:29 +0800 Subject: [PATCH 20/44] packaging statistics logger --- src/qiniu.js | 68 +++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index e5e7a0a6..218c8137 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -172,9 +172,6 @@ var changeUrlTimes = 0; - // api to collect upload logs - var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/2"; - /** * reset upload url * if current page protocal is https @@ -767,33 +764,40 @@ } return key; }; - - /** - * send logs to statistics server - * - * @param {number} code status code - * @param {string} req_id request id - * @param {number} file_size file total size (bytes) - * @param {number} sent_size uploaded size (bytes) - * @param {string} sdk_runtime js sdk runtime: html5, html4, flash - */ - var sendLogToServer = function (code, req_id, file_size, sent_size, sdk_runtime) { - logger.debug("[STATISTICS] send log to server", arguments) - // TODO add send queue - // var ajax = that.createAjax(); - // ajax.open('POST', qiniuCollectUploadLogUrl, true); - // ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - // ajax.onreadystatechange = function () { - // if (ajax.readyState === 4) { - // if (ajax.status === 200) { - // logger.debug("successfully report log to server") - // } else { - // logger.debug("report log to server failed") - // } - // } - // }; - // ajax.send(arguments.join(",")); + + function StatisticsLogger() { + // api to collect upload logs + var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/2"; + + /** + * send logs to statistics server + * + * @param {number} code status code + * @param {string} req_id request id + * @param {number} file_size file total size (bytes) + * @param {number} sent_size uploaded size (bytes) + * @param {string} sdk_runtime js sdk runtime: html5, html4, flash + */ + this.log = function (code, req_id, file_size, sent_size, sdk_runtime) { + var log = Array.prototype.join.call(arguments, ',') + logger.debug("[STATISTICS] send log to server", log) + // TODO add send queue + // var ajax = that.createAjax(); + // ajax.open('POST', qiniuCollectUploadLogUrl, true); + // ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + // ajax.onreadystatechange = function () { + // if (ajax.readyState === 4) { + // if (ajax.status === 200) { + // logger.debug("successfully report log to server") + // } else { + // logger.debug("report log to server failed") + // } + // } + // }; + // ajax.send(arguments.join(",")); + } } + var statisticsLogger = new StatisticsLogger(); /********** inner function define end **********/ @@ -1265,7 +1269,7 @@ // add send log for upload error var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] var req_id = matchedGroups[2] - sendLogToServer(err.code, req_id, err.file.size, err.file.size * (err.file.percent / 100), up.runtime); + statisticsLogger.log(err.code, req_id, err.file.size, err.file.size * (err.file.percent / 100), up.runtime); }; })(_Error_Handler)); @@ -1406,7 +1410,7 @@ // TODO status code ? send log for upload complete var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2] - sendLogToServer(info.status, req_id, file.size, file.size, up.runtime); + statisticsLogger.log(info.status, req_id, file.size, file.size, up.runtime); }; })(_FileUploaded_Handler)); @@ -1418,7 +1422,7 @@ uploader.bind('FilesRemoved', function (up, files) { // TODO status code ? add cancel log for (var i = 0; i < files.length; i++) { - sendLogToServer(-1, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); + statisticsLogger.log(-1, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); } }) From b65de17a8dde6d330b81a71657311759fc412652 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Fri, 30 Jun 2017 18:25:35 +0800 Subject: [PATCH 21/44] finish send logs --- src/qiniu.js | 68 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 218c8137..675a6999 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -769,6 +769,16 @@ // api to collect upload logs var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/2"; + /** + * { log: string, status: number }[] status: 0 待处理, 1 正在发送, 2 发送完毕 + */ + var queue = []; + var TaskStatus = { + waiting: 0, + processing: 1, + finished: 2 + } + /** * send logs to statistics server * @@ -779,23 +789,49 @@ * @param {string} sdk_runtime js sdk runtime: html5, html4, flash */ this.log = function (code, req_id, file_size, sent_size, sdk_runtime) { - var log = Array.prototype.join.call(arguments, ',') - logger.debug("[STATISTICS] send log to server", log) - // TODO add send queue - // var ajax = that.createAjax(); - // ajax.open('POST', qiniuCollectUploadLogUrl, true); - // ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - // ajax.onreadystatechange = function () { - // if (ajax.readyState === 4) { - // if (ajax.status === 200) { - // logger.debug("successfully report log to server") - // } else { - // logger.debug("report log to server failed") - // } - // } - // }; - // ajax.send(arguments.join(",")); + var log = Array.prototype.join.call(arguments, ','); + queue.push({ + log: log, + status: TaskStatus.waiting + }); + logger.debug("[STATISTICS] send log to statistics server", log); + } + + function tick() { + var unFinishedTasks = []; + for (var i = 0; i < queue.length; i++) { + if (queue[i].status !== TaskStatus.finished) { + unFinishedTasks.push(queue[i]); + } + if (queue[i].status === TaskStatus.waiting) { + send(queue[i]); + } + } + queue = unFinishedTasks; + } + + function send(task) { + task.status = TaskStatus.processing; + var ajax = that.createAjax(); + ajax.open('POST', qiniuCollectUploadLogUrl, true); + ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + ajax.onreadystatechange = function () { + if (ajax.readyState === 4) { + if (ajax.status === 200) { + logger.debug("[STATISTICS] successfully report log to server"); + task.status = TaskStatus.finished; + } else { + logger.debug("[STATISTICS] report log to server failed"); + task.status = TaskStatus.waiting; + } + } + }; + ajax.send(task.log); } + + // start a timer to report + setInterval(tick, 1000); } var statisticsLogger = new StatisticsLogger(); From 7495737561d81d0615a59fb66ae75b98712944cb Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 11:22:02 +0800 Subject: [PATCH 22/44] change log code --- src/qiniu.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 675a6999..4ed20933 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -834,6 +834,19 @@ setInterval(tick, 1000); } var statisticsLogger = new StatisticsLogger(); + var ExtraErrors = { + ZeroSizeFile: -6, + InvalidToken: -5, + InvalidArgument: -4, + InvalidFile: -3, + Cancelled: -2, + NetworkError: -1, + UnknownError: 0, + TimedOut: -1001, + UnknownHost: -1003, + CannotConnectToHost: -1004, + NetworkConnectionLost: -1005 + } /********** inner function define end **********/ @@ -1305,7 +1318,11 @@ // add send log for upload error var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] var req_id = matchedGroups[2] - statisticsLogger.log(err.code, req_id, err.file.size, err.file.size * (err.file.percent / 100), up.runtime); + statisticsLogger.log( + err.code == plupload.HTTP_ERROR ? err.status : err.code, req_id, + err.file.size, + err.file.size * (err.file.percent / 100), + up.runtime); }; })(_Error_Handler)); @@ -1458,7 +1475,7 @@ uploader.bind('FilesRemoved', function (up, files) { // TODO status code ? add cancel log for (var i = 0; i < files.length; i++) { - statisticsLogger.log(-1, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); + statisticsLogger.log(ExtraErrors.Cancelled, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); } }) From 063ac15eb03d39a86e9292801cb65ba50997c03c Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 14:48:46 +0800 Subject: [PATCH 23/44] finish report logs --- src/qiniu.js | 84 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 4ed20933..3299e379 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -765,9 +765,36 @@ return key; }; + var getDomainFromUrl = function (url) { + if (url && url.match) { + var groups = url.match(/^https?:\/\/([^:^/]*)/); + return groups ? groups[1] : ""; + } + return ""; + } + + var getPortFromUrl = function (url) { + if (url && url.match) { + var groups = url.match(/(^https?)/) + if (!groups) { + return ""; + } + var type = groups[1]; + groups = url.match(/^https?:\/\/([^:^/]*):(\d*)/); + if (groups) { + return groups[2]; + } else if (type == "http") { + return "80"; + } else { + return "443"; + } + } + return ""; + } + function StatisticsLogger() { // api to collect upload logs - var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/2"; + var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/3"; /** * { log: string, status: number }[] status: 0 待处理, 1 正在发送, 2 发送完毕 @@ -784,11 +811,16 @@ * * @param {number} code status code * @param {string} req_id request id + * @param {string} host + * @param {string} remote_ip + * @param {string} port + * @param {string} duration + * @param {string} up_time + * @param {number} bytes_sent uploaded size (bytes) + * @param {string} up_type js sdk runtime: html5, html4, flash * @param {number} file_size file total size (bytes) - * @param {number} sent_size uploaded size (bytes) - * @param {string} sdk_runtime js sdk runtime: html5, html4, flash */ - this.log = function (code, req_id, file_size, sent_size, sdk_runtime) { + this.log = function (code, req_id, host, remote_ip, port, duration, up_time, bytes_sent, up_type, file_size) { var log = Array.prototype.join.call(arguments, ','); queue.push({ log: log, @@ -1318,11 +1350,19 @@ // add send log for upload error var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] var req_id = matchedGroups[2] + var errcode = plupload.HTTP_ERROR ? err.status : err.code, req_id statisticsLogger.log( - err.code == plupload.HTTP_ERROR ? err.status : err.code, req_id, - err.file.size, + errcode == 0 ? ExtraErrors.NetworkError: errcode, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + file.lastModifiedDate.getTime(), err.file.size * (err.file.percent / 100), - up.runtime); + "jssdk-" + up.runtime, + file.size + ) }; })(_Error_Handler)); @@ -1461,9 +1501,20 @@ last_step(up, file, info); } - // TODO status code ? send log for upload complete + // send statistics log var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2] - statisticsLogger.log(info.status, req_id, file.size, file.size, up.runtime); + statisticsLogger.log( + info.status, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + file.lastModifiedDate.getTime(), + file.size, + "jssdk-" + up.runtime, + file.size + ) }; })(_FileUploaded_Handler)); @@ -1473,9 +1524,20 @@ // intercept the cancel of upload // used to send statistics log to server uploader.bind('FilesRemoved', function (up, files) { - // TODO status code ? add cancel log + // add cancel log for (var i = 0; i < files.length; i++) { - statisticsLogger.log(ExtraErrors.Cancelled, undefined, files[i].size, files[i].size * files[i].percent / 100, up.runtime); + statisticsLogger.log( + ExtraErrors.Cancelled, + undefined, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + files[i].lastModifiedDate.getTime(), + files[i].size, + "jssdk-" + up.runtime, + files[i].size + ); } }) From 8d33c96d5745c16b4370fe501434c977759e3f18 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 15:19:10 +0800 Subject: [PATCH 24/44] extract statistics logger out of uploader --- src/qiniu.js | 181 ++++++++++++++++++++++++++------------------------- 1 file changed, 91 insertions(+), 90 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 3299e379..ed55f8c7 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -172,6 +172,94 @@ var changeUrlTimes = 0; + function StatisticsLogger() { + // api to collect upload logs + var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/3"; + + /** + * { log: string, status: number }[] status: 0 待处理, 1 正在发送, 2 发送完毕 + */ + var queue = []; + var TaskStatus = { + waiting: 0, + processing: 1, + finished: 2 + } + + /** + * send logs to statistics server + * + * @param {number} code status code + * @param {string} req_id request id + * @param {string} host + * @param {string} remote_ip + * @param {string} port + * @param {string} duration + * @param {string} up_time + * @param {number} bytes_sent uploaded size (bytes) + * @param {string} up_type js sdk runtime: html5, html4, flash + * @param {number} file_size file total size (bytes) + */ + this.log = function (code, req_id, host, remote_ip, port, duration, up_time, bytes_sent, up_type, file_size) { + var log = Array.prototype.join.call(arguments, ','); + queue.push({ + log: log, + status: TaskStatus.waiting + }); + logger.debug("[STATISTICS] send log to statistics server", log); + } + + function tick() { + var unFinishedTasks = []; + for (var i = 0; i < queue.length; i++) { + if (queue[i].status !== TaskStatus.finished) { + unFinishedTasks.push(queue[i]); + } + if (queue[i].status === TaskStatus.waiting) { + send(queue[i]); + } + } + queue = unFinishedTasks; + } + + function send(task) { + task.status = TaskStatus.processing; + var ajax = that.createAjax(); + ajax.open('POST', qiniuCollectUploadLogUrl, true); + ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + ajax.onreadystatechange = function () { + if (ajax.readyState === 4) { + if (ajax.status === 200) { + logger.debug("[STATISTICS] successfully report log to server"); + task.status = TaskStatus.finished; + } else { + logger.debug("[STATISTICS] report log to server failed"); + task.status = TaskStatus.waiting; + } + } + }; + ajax.send(task.log); + } + + // start a timer to report + setInterval(tick, 1000); + } + var statisticsLogger = new StatisticsLogger(); + var ExtraErrors = { + ZeroSizeFile: -6, + InvalidToken: -5, + InvalidArgument: -4, + InvalidFile: -3, + Cancelled: -2, + NetworkError: -1, + UnknownError: 0, + TimedOut: -1001, + UnknownHost: -1003, + CannotConnectToHost: -1004, + NetworkConnectionLost: -1005 + } + /** * reset upload url * if current page protocal is https @@ -792,94 +880,6 @@ return ""; } - function StatisticsLogger() { - // api to collect upload logs - var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/3"; - - /** - * { log: string, status: number }[] status: 0 待处理, 1 正在发送, 2 发送完毕 - */ - var queue = []; - var TaskStatus = { - waiting: 0, - processing: 1, - finished: 2 - } - - /** - * send logs to statistics server - * - * @param {number} code status code - * @param {string} req_id request id - * @param {string} host - * @param {string} remote_ip - * @param {string} port - * @param {string} duration - * @param {string} up_time - * @param {number} bytes_sent uploaded size (bytes) - * @param {string} up_type js sdk runtime: html5, html4, flash - * @param {number} file_size file total size (bytes) - */ - this.log = function (code, req_id, host, remote_ip, port, duration, up_time, bytes_sent, up_type, file_size) { - var log = Array.prototype.join.call(arguments, ','); - queue.push({ - log: log, - status: TaskStatus.waiting - }); - logger.debug("[STATISTICS] send log to statistics server", log); - } - - function tick() { - var unFinishedTasks = []; - for (var i = 0; i < queue.length; i++) { - if (queue[i].status !== TaskStatus.finished) { - unFinishedTasks.push(queue[i]); - } - if (queue[i].status === TaskStatus.waiting) { - send(queue[i]); - } - } - queue = unFinishedTasks; - } - - function send(task) { - task.status = TaskStatus.processing; - var ajax = that.createAjax(); - ajax.open('POST', qiniuCollectUploadLogUrl, true); - ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); - ajax.onreadystatechange = function () { - if (ajax.readyState === 4) { - if (ajax.status === 200) { - logger.debug("[STATISTICS] successfully report log to server"); - task.status = TaskStatus.finished; - } else { - logger.debug("[STATISTICS] report log to server failed"); - task.status = TaskStatus.waiting; - } - } - }; - ajax.send(task.log); - } - - // start a timer to report - setInterval(tick, 1000); - } - var statisticsLogger = new StatisticsLogger(); - var ExtraErrors = { - ZeroSizeFile: -6, - InvalidToken: -5, - InvalidArgument: -4, - InvalidFile: -3, - Cancelled: -2, - NetworkError: -1, - UnknownError: 0, - TimedOut: -1001, - UnknownHost: -1003, - CannotConnectToHost: -1004, - NetworkConnectionLost: -1005 - } - /********** inner function define end **********/ if (op.log_level) { @@ -1350,9 +1350,10 @@ // add send log for upload error var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] var req_id = matchedGroups[2] - var errcode = plupload.HTTP_ERROR ? err.status : err.code, req_id + var errcode = plupload.HTTP_ERROR ? err.status : err.code, + req_id statisticsLogger.log( - errcode == 0 ? ExtraErrors.NetworkError: errcode, + errcode == 0 ? ExtraErrors.NetworkError : errcode, req_id, getDomainFromUrl(up.settings.url), undefined, From c68f9d9f9da0edd16052ee3e48675a81ca15da76 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 15:35:17 +0800 Subject: [PATCH 25/44] add disableStatisticsReport config to uploader --- demo/scripts/main.js | 1 + src/qiniu.js | 89 +++++++++++++++++++++++--------------------- 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 451c9f79..af814814 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -5,6 +5,7 @@ $(function() { var uploader = Qiniu.uploader({ + disable_statistics_report: false, runtimes: 'html5,flash,html4', browse_button: 'pickfiles', container: 'container', diff --git a/src/qiniu.js b/src/qiniu.js index ed55f8c7..4bd4c007 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1348,22 +1348,23 @@ up.refresh(); // Reposition Flash/Silverlight // add send log for upload error - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : [] - var req_id = matchedGroups[2] - var errcode = plupload.HTTP_ERROR ? err.status : err.code, - req_id - statisticsLogger.log( - errcode == 0 ? ExtraErrors.NetworkError : errcode, - req_id, - getDomainFromUrl(up.settings.url), - undefined, - getPortFromUrl(up.settings.url), - undefined, - file.lastModifiedDate.getTime(), - err.file.size * (err.file.percent / 100), - "jssdk-" + up.runtime, - file.size - ) + if (!op.disable_statistics_report) { + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : []; + var req_id = matchedGroups[2]; + var errcode = plupload.HTTP_ERROR ? err.status : err.code; + statisticsLogger.log( + errcode == 0 ? ExtraErrors.NetworkError : errcode, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + file.lastModifiedDate.getTime(), + err.file.size * (err.file.percent / 100), + "jssdk-" + up.runtime, + file.size + ); + } }; })(_Error_Handler)); @@ -1503,19 +1504,21 @@ } // send statistics log - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2] - statisticsLogger.log( - info.status, - req_id, - getDomainFromUrl(up.settings.url), - undefined, - getPortFromUrl(up.settings.url), - undefined, - file.lastModifiedDate.getTime(), - file.size, - "jssdk-" + up.runtime, - file.size - ) + if (!op.disable_statistics_report) { + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2]; + statisticsLogger.log( + info.status, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + file.lastModifiedDate.getTime(), + file.size, + "jssdk-" + up.runtime, + file.size + ); + } }; })(_FileUploaded_Handler)); @@ -1526,19 +1529,21 @@ // used to send statistics log to server uploader.bind('FilesRemoved', function (up, files) { // add cancel log - for (var i = 0; i < files.length; i++) { - statisticsLogger.log( - ExtraErrors.Cancelled, - undefined, - getDomainFromUrl(up.settings.url), - undefined, - getPortFromUrl(up.settings.url), - undefined, - files[i].lastModifiedDate.getTime(), - files[i].size, - "jssdk-" + up.runtime, - files[i].size - ); + if (!op.disable_statistics_report) { + for (var i = 0; i < files.length; i++) { + statisticsLogger.log( + ExtraErrors.Cancelled, + undefined, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + undefined, + files[i].lastModifiedDate.getTime(), + files[i].size, + "jssdk-" + up.runtime, + files[i].size + ); + } } }) From d94cc264d42cdcefe3901698d8e389235a0de447 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 15:42:59 +0800 Subject: [PATCH 26/44] add readme info & change package version --- README.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 168e10a1..847aca72 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js ```JavaScript var uploader = Qiniu.uploader({ + disable_statistics_report: false, // 禁止自动发送上传统计信息到七牛,默认允许发送 runtimes: 'html5,flash,html4', // 上传模式,依次退化 browse_button: 'pickfiles', // 上传选择的点选按钮,**必需** // 在初始化时,uptoken, uptoken_url, uptoken_func 三个参数中必须有一个被设置 diff --git a/package.json b/package.json index 9684343b..ef7b8686 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qiniu-js", "jsName": "qiniu", - "version": "1.0.20", + "version": "1.0.21", "private": false, "scripts": { "start": "node demo/server.js" From 0cf16ce643bc56d13f9cfb9212b5944541f24db3 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 15:59:02 +0800 Subject: [PATCH 27/44] add duration to statistics log --- src/qiniu.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 4bd4c007..8a6c03a4 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1023,6 +1023,7 @@ // - resume upload with the last breakpoint of file uploader.bind('BeforeUpload', function (up, file) { logger.debug("BeforeUpload event activated"); + file._start_at = new Date(); // add a key named speed for file object file.speed = file.speed || 0; ctx = ''; @@ -1358,8 +1359,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - undefined, - file.lastModifiedDate.getTime(), + (new Date()).getTime() - file._start_at.getTime(), + file._start_at.getTime(), err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, file.size @@ -1512,8 +1513,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - undefined, - file.lastModifiedDate.getTime(), + (new Date()).getTime() - file._start_at.getTime(), + file._start_at.getTime(), file.size, "jssdk-" + up.runtime, file.size @@ -1537,8 +1538,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - undefined, - files[i].lastModifiedDate.getTime(), + (new Date()).getTime() - files[i]._start_at.getTime(), + files[i]._start_at.getTime(), files[i].size, "jssdk-" + up.runtime, files[i].size From 909f111110022abea34fa1f851401597e495e45d Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 16:13:19 +0800 Subject: [PATCH 28/44] fix ci issue --- src/qiniu.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 8a6c03a4..f6fc333b 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -184,7 +184,7 @@ waiting: 0, processing: 1, finished: 2 - } + }; /** * send logs to statistics server @@ -207,7 +207,7 @@ status: TaskStatus.waiting }); logger.debug("[STATISTICS] send log to statistics server", log); - } + }; function tick() { var unFinishedTasks = []; @@ -258,7 +258,7 @@ UnknownHost: -1003, CannotConnectToHost: -1004, NetworkConnectionLost: -1005 - } + }; /** * reset upload url @@ -607,6 +607,7 @@ } return '{' + string.join(',') + '}'; } + break; case 'number': return obj; case false: @@ -859,11 +860,11 @@ return groups ? groups[1] : ""; } return ""; - } + }; var getPortFromUrl = function (url) { if (url && url.match) { - var groups = url.match(/(^https?)/) + var groups = url.match(/(^https?)/); if (!groups) { return ""; } @@ -871,14 +872,14 @@ groups = url.match(/^https?:\/\/([^:^/]*):(\d*)/); if (groups) { return groups[2]; - } else if (type == "http") { + } else if (type === "http") { return "80"; } else { return "443"; } } return ""; - } + }; /********** inner function define end **********/ @@ -1253,6 +1254,7 @@ return function (up, err) { logger.error("Error event activated"); logger.error("err: ", err); + var nowTime = new Date(); var errTip = ''; var file = err.file; if (file) { @@ -1354,12 +1356,12 @@ var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; statisticsLogger.log( - errcode == 0 ? ExtraErrors.NetworkError : errcode, + errcode === 0 ? ExtraErrors.NetworkError : errcode, req_id, getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - (new Date()).getTime() - file._start_at.getTime(), + nowTime.getTime() - file._start_at.getTime(), file._start_at.getTime(), err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, @@ -1380,6 +1382,7 @@ logger.debug("FileUploaded event activated"); logger.debug("FileUploaded file: ", file); logger.debug("FileUploaded info: ", info); + var nowTime = new Date(); var last_step = function (up, file, info) { logger.debug("FileUploaded last step:", info); if (op.downtoken_url) { @@ -1513,7 +1516,7 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - (new Date()).getTime() - file._start_at.getTime(), + nowTime.getTime() - file._start_at.getTime(), file._start_at.getTime(), file.size, "jssdk-" + up.runtime, @@ -1529,6 +1532,7 @@ // intercept the cancel of upload // used to send statistics log to server uploader.bind('FilesRemoved', function (up, files) { + var nowTime = new Date(); // add cancel log if (!op.disable_statistics_report) { for (var i = 0; i < files.length; i++) { @@ -1538,7 +1542,7 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - (new Date()).getTime() - files[i]._start_at.getTime(), + nowTime.getTime() - files[i]._start_at.getTime(), files[i]._start_at.getTime(), files[i].size, "jssdk-" + up.runtime, @@ -1546,7 +1550,7 @@ ); } } - }) + }); logger.debug("bind FilesRemoved event"); From 9e8d313c7d4738ee1202623e40b2a6c5ac1db7ac Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Mon, 3 Jul 2017 16:42:40 +0800 Subject: [PATCH 29/44] update dist files --- dist/qiniu.js | 3057 +++++++++++++++++++++++--------------------- dist/qiniu.min.js | 4 +- dist/qiniu.min.map | 2 +- 3 files changed, 1621 insertions(+), 1442 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 33988a22..155f4e17 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -1,1644 +1,1823 @@ /*! - * qiniu-js-sdk v1.0.20 + * qiniu-js-sdk v1.0.21 * * Copyright 2015 by Qiniu * Released under GPL V2 License. * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-4-5 -*/ + * Date: 2017-7-3 + */ /*global plupload ,moxie*/ /*global ActiveXObject */ /*exported Qiniu */ /*exported QiniuJsSDK */ -;(function( global ){ +;(function (global) { -/** - * Creates new cookie or removes cookie with negative expiration - * @param key The key or identifier for the store - * @param value Contents of the store - * @param exp Expiration - creation defaults to 30 days - */ -function createCookie(key, value, exp) { - var date = new Date(); - date.setTime(date.getTime() + (exp * 24 * 60 * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - document.cookie = key + "=" + value + expires + "; path=/"; -} - -/** - * Returns contents of cookie - * @param key The key or identifier for the store - */ -function readCookie(key) { - var nameEQ = key + "="; - var ca = document.cookie.split(';'); - for (var i = 0, max = ca.length; i < max; i++) { - var c = ca[i]; - while (c.charAt(0) === ' ') { - c = c.substring(1, c.length); - } - if (c.indexOf(nameEQ) === 0) { - return c.substring(nameEQ.length, c.length); - } + /** + * Creates new cookie or removes cookie with negative expiration + * @param key The key or identifier for the store + * @param value Contents of the store + * @param exp Expiration - creation defaults to 30 days + */ + function createCookie(key, value, exp) { + var date = new Date(); + date.setTime(date.getTime() + (exp * 24 * 60 * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + document.cookie = key + "=" + value + expires + "; path=/"; } - return null; -} - -// if current browser is not support localStorage -// use cookie to make a polyfill -if ( !window.localStorage ) { - window.localStorage = { - setItem: function (key, value) { - createCookie(key, value, 30); - }, - getItem: function (key) { - return readCookie(key); - }, - removeItem: function (key) { - createCookie(key, '', -1); - } - }; -} - -function QiniuJsSDK() { - - var that = this; /** - * detect IE version - * if current browser is not IE - * it will return false - * else - * it will return version of current IE browser - * @return {Number|Boolean} IE version or false + * Returns contents of cookie + * @param key The key or identifier for the store */ - this.detectIEVersion = function() { - var v = 4, - div = document.createElement('div'), - all = div.getElementsByTagName('i'); - while ( - div.innerHTML = '', - all[0] - ) { - v++; - } - 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+"]"; - var msg = header; - for (var i = 0; i < args.length; i++) { - if (typeof args[i] === "string") { - msg += " " + args[i]; - } else { - msg += " " + that.stringifyJSON(args[i]); + function readCookie(key) { + var nameEQ = key + "="; + var ca = document.cookie.split(';'); + for (var i = 0, max = ca.length; i < max; i++) { + var c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1, c.length); + } + if (c.indexOf(nameEQ) === 0) { + return c.substring(nameEQ.length, c.length); } } - 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); - console.log(msg); - }else{ - args.unshift(header); - console.log.apply(console, args); - } - if (document.getElementById('qiniu-js-sdk-log')) { - document.getElementById('qiniu-js-sdk-log').innerHTML += '

'+msg+'

'; - } + return null; } - 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); + // if current browser is not support localStorage + // use cookie to make a polyfill + if (!window.localStorage) { + window.localStorage = { + setItem: function (key, value) { + createCookie(key, value, 30); + }, + getItem: function (key) { + return readCookie(key); + }, + removeItem: function (key) { + createCookie(key, '', -1); } }; } - for (var property in logger){ - if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) { - makeLogFunc(property); - } - } + function QiniuJsSDK() { + var that = this; - var qiniuUploadUrl; - if (window.location.protocol === 'https:') { - qiniuUploadUrl = 'https://up.qbox.me'; - } else { - qiniuUploadUrl = 'http://upload.qiniu.com'; - } + /** + * detect IE version + * if current browser is not IE + * it will return false + * else + * it will return version of current IE browser + * @return {Number|Boolean} IE version or false + */ + this.detectIEVersion = function () { + var v = 4, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + while ( + div.innerHTML = '', + all[0] + ) { + v++; + } + return v > 4 ? v : false; + }; - /** - * qiniu upload urls - * 'qiniuUploadUrls' is used to change target when current url is not avaliable - * @type {Array} - */ - var qiniuUploadUrls = [ - "http://upload.qiniu.com", - "http://up.qiniu.com" - ]; - - var qiniuUpHosts = { - "http": [ - "http://upload.qiniu.com", - "http://up.qiniu.com" - ], - "https": [ - "https://up.qbox.me" - ] - }; - - var changeUrlTimes = 0; + var logger = { + MUTE: 0, + FATA: 1, + ERROR: 2, + WARN: 3, + INFO: 4, + DEBUG: 5, + TRACE: 6, + level: 0 + }; - /** - * reset upload url - * if current page protocal is https - * it will always return 'https://up.qbox.me' - * else - * it will set 'qiniuUploadUrl' value with 'qiniuUploadUrls' looply - */ - this.resetUploadUrl = function(){ - var hosts = window.location.protocol === 'https:' ? qiniuUpHosts.https : qiniuUpHosts.http; - var i = changeUrlTimes % hosts.length; - qiniuUploadUrl = hosts[i]; - changeUrlTimes++; - logger.debug('resetUploadUrl: '+qiniuUploadUrl); - }; + function log(type, args) { + var header = "[qiniu-js-sdk][" + type + "]"; + var msg = header; + for (var i = 0; i < args.length; i++) { + if (typeof args[i] === "string") { + msg += " " + args[i]; + } else { + msg += " " + that.stringifyJSON(args[i]); + } + } + 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); + console.log(msg); + } else { + args.unshift(header); + console.log.apply(console, args); + } + if (document.getElementById('qiniu-js-sdk-log')) { + document.getElementById('qiniu-js-sdk-log').innerHTML += '

' + msg + '

'; + } + } - // this.resetUploadUrl(); + 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 - * @return {Boolean} file is a image or not - */ - this.isImage = function(url) { - url = url.split(/[?#]/)[0]; - return (/\.(png|jpg|jpeg|gif|bmp)$/i).test(url); - }; - /** - * get file extension - * @param {String} filename - * @return {String} file extension - * @example - * input: test.txt - * output: txt - */ - this.getFileExtension = function(filename) { - var tempArr = filename.split("."); - var ext; - if (tempArr.length === 1 || (tempArr[0] === "" && tempArr.length === 2)) { - ext = ""; + var qiniuUploadUrl; + if (window.location.protocol === 'https:') { + qiniuUploadUrl = 'https://up.qbox.me'; } else { - ext = tempArr.pop().toLowerCase(); //get the extension and make it lower-case + qiniuUploadUrl = 'http://upload.qiniu.com'; } - return ext; - }; - /** - * encode string by utf8 - * @param {String} string to encode - * @return {String} encoded string - */ - this.utf8_encode = function(argString) { - // http://kevin.vanzonneveld.net - // + original by: Webtoolkit.info (http://www.webtoolkit.info/) - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: sowberry - // + tweaked by: Jack - // + bugfixed by: Onno Marsman - // + improved by: Yves Sucaet - // + bugfixed by: Onno Marsman - // + bugfixed by: Ulrich - // + bugfixed by: Rafal Kukawski - // + improved by: kirilloid - // + bugfixed by: kirilloid - // * example 1: this.utf8_encode('Kevin van Zonneveld'); - // * returns 1: 'Kevin van Zonneveld' - - if (argString === null || typeof argString === 'undefined') { - return ''; - } + /** + * qiniu upload urls + * 'qiniuUploadUrls' is used to change target when current url is not avaliable + * @type {Array} + */ + var qiniuUploadUrls = [ + "http://upload.qiniu.com", + "http://up.qiniu.com" + ]; + + var qiniuUpHosts = { + "http": [ + "http://upload.qiniu.com", + "http://up.qiniu.com" + ], + "https": [ + "https://up.qbox.me" + ] + }; - var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n'); - var utftext = '', - start, end, stringl = 0; - - start = end = 0; - stringl = string.length; - for (var n = 0; n < stringl; n++) { - var c1 = string.charCodeAt(n); - var enc = null; - - if (c1 < 128) { - end++; - } else if (c1 > 127 && c1 < 2048) { - enc = String.fromCharCode( - (c1 >> 6) | 192, (c1 & 63) | 128 - ); - } else if (c1 & 0xF800 ^ 0xD800 > 0) { - enc = String.fromCharCode( - (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 - ); - } else { // surrogate pairs - if (c1 & 0xFC00 ^ 0xD800 > 0) { - throw new RangeError('Unmatched trail surrogate at ' + n); - } - var c2 = string.charCodeAt(++n); - if (c2 & 0xFC00 ^ 0xDC00 > 0) { - throw new RangeError('Unmatched lead surrogate at ' + (n - 1)); - } - c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000; - enc = String.fromCharCode( - (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 - ); - } - if (enc !== null) { - if (end > start) { - utftext += string.slice(start, end); + var changeUrlTimes = 0; + + function StatisticsLogger() { + // api to collect upload logs + var qiniuCollectUploadLogUrl = "https://uplog.qbox.me/log/3"; + + /** + * { log: string, status: number }[] status: 0 待处理, 1 正在发送, 2 发送完毕 + */ + var queue = []; + var TaskStatus = { + waiting: 0, + processing: 1, + finished: 2 + }; + + /** + * send logs to statistics server + * + * @param {number} code status code + * @param {string} req_id request id + * @param {string} host + * @param {string} remote_ip + * @param {string} port + * @param {string} duration + * @param {string} up_time + * @param {number} bytes_sent uploaded size (bytes) + * @param {string} up_type js sdk runtime: html5, html4, flash + * @param {number} file_size file total size (bytes) + */ + this.log = function (code, req_id, host, remote_ip, port, duration, up_time, bytes_sent, up_type, file_size) { + var log = Array.prototype.join.call(arguments, ','); + queue.push({ + log: log, + status: TaskStatus.waiting + }); + logger.debug("[STATISTICS] send log to statistics server", log); + }; + + function tick() { + var unFinishedTasks = []; + for (var i = 0; i < queue.length; i++) { + if (queue[i].status !== TaskStatus.finished) { + unFinishedTasks.push(queue[i]); + } + if (queue[i].status === TaskStatus.waiting) { + send(queue[i]); + } } - utftext += enc; - start = end = n + 1; + queue = unFinishedTasks; } - } - if (end > start) { - utftext += string.slice(start, stringl); - } + function send(task) { + task.status = TaskStatus.processing; + var ajax = that.createAjax(); + ajax.open('POST', qiniuCollectUploadLogUrl, true); + ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + ajax.onreadystatechange = function () { + if (ajax.readyState === 4) { + if (ajax.status === 200) { + logger.debug("[STATISTICS] successfully report log to server"); + task.status = TaskStatus.finished; + } else { + logger.debug("[STATISTICS] report log to server failed"); + task.status = TaskStatus.waiting; + } + } + }; + ajax.send(task.log); + } - return utftext; - }; - - this.base64_decode = function (data) { - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Thunder.m - // + input by: Aman Gupta - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Onno Marsman - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); - // * returns 1: 'Kevin van Zonneveld' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['atob'] == 'function') { - // return atob(data); - //} - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - dec = "", - tmp_arr = []; - - if (!data) { - return data; + // start a timer to report + setInterval(tick, 1000); } + var statisticsLogger = new StatisticsLogger(); + var ExtraErrors = { + ZeroSizeFile: -6, + InvalidToken: -5, + InvalidArgument: -4, + InvalidFile: -3, + Cancelled: -2, + NetworkError: -1, + UnknownError: 0, + TimedOut: -1001, + UnknownHost: -1003, + CannotConnectToHost: -1004, + NetworkConnectionLost: -1005 + }; - data += ''; + /** + * reset upload url + * if current page protocal is https + * it will always return 'https://up.qbox.me' + * else + * it will set 'qiniuUploadUrl' value with 'qiniuUploadUrls' looply + */ + this.resetUploadUrl = function () { + var hosts = window.location.protocol === 'https:' ? qiniuUpHosts.https : qiniuUpHosts.http; + var i = changeUrlTimes % hosts.length; + qiniuUploadUrl = hosts[i]; + changeUrlTimes++; + logger.debug('resetUploadUrl: ' + qiniuUploadUrl); + }; - do { // unpack four hexets into three octets using index points in b64 - h1 = b64.indexOf(data.charAt(i++)); - h2 = b64.indexOf(data.charAt(i++)); - h3 = b64.indexOf(data.charAt(i++)); - h4 = b64.indexOf(data.charAt(i++)); + // this.resetUploadUrl(); - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; + /** + * is image + * @param {String} url of a file + * @return {Boolean} file is a image or not + */ + this.isImage = function (url) { + url = url.split(/[?#]/)[0]; + return (/\.(png|jpg|jpeg|gif|bmp)$/i).test(url); + }; - if (h3 === 64) { - tmp_arr[ac++] = String.fromCharCode(o1); - } else if (h4 === 64) { - tmp_arr[ac++] = String.fromCharCode(o1, o2); + /** + * get file extension + * @param {String} filename + * @return {String} file extension + * @example + * input: test.txt + * output: txt + */ + this.getFileExtension = function (filename) { + var tempArr = filename.split("."); + var ext; + if (tempArr.length === 1 || (tempArr[0] === "" && tempArr.length === 2)) { + ext = ""; } else { - tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + ext = tempArr.pop().toLowerCase(); //get the extension and make it lower-case } - } while (i < data.length); + return ext; + }; - dec = tmp_arr.join(''); + /** + * encode string by utf8 + * @param {String} string to encode + * @return {String} encoded string + */ + this.utf8_encode = function (argString) { + // http://kevin.vanzonneveld.net + // + original by: Webtoolkit.info (http://www.webtoolkit.info/) + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: sowberry + // + tweaked by: Jack + // + bugfixed by: Onno Marsman + // + improved by: Yves Sucaet + // + bugfixed by: Onno Marsman + // + bugfixed by: Ulrich + // + bugfixed by: Rafal Kukawski + // + improved by: kirilloid + // + bugfixed by: kirilloid + // * example 1: this.utf8_encode('Kevin van Zonneveld'); + // * returns 1: 'Kevin van Zonneveld' + + if (argString === null || typeof argString === 'undefined') { + return ''; + } - return dec; - }; + var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n'); + var utftext = '', + start, end, stringl = 0; + + start = end = 0; + stringl = string.length; + for (var n = 0; n < stringl; n++) { + var c1 = string.charCodeAt(n); + var enc = null; + + if (c1 < 128) { + end++; + } else if (c1 > 127 && c1 < 2048) { + enc = String.fromCharCode( + (c1 >> 6) | 192, (c1 & 63) | 128 + ); + } else if (c1 & 0xF800 ^ 0xD800 > 0) { + enc = String.fromCharCode( + (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 + ); + } else { // surrogate pairs + if (c1 & 0xFC00 ^ 0xD800 > 0) { + throw new RangeError('Unmatched trail surrogate at ' + n); + } + var c2 = string.charCodeAt(++n); + if (c2 & 0xFC00 ^ 0xDC00 > 0) { + throw new RangeError('Unmatched lead surrogate at ' + (n - 1)); + } + c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000; + enc = String.fromCharCode( + (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128 + ); + } + if (enc !== null) { + if (end > start) { + utftext += string.slice(start, end); + } + utftext += enc; + start = end = n + 1; + } + } - /** - * encode data by base64 - * @param {String} data to encode - * @return {String} encoded data - */ - this.base64_encode = function(data) { - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Bayron Guevara - // + improved by: Thunder.m - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // - depends on: this.utf8_encode - // * example 1: this.base64_encode('Kevin van Zonneveld'); - // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window['atob'] == 'function') { - // return atob(data); - //} - var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - enc = '', - tmp_arr = []; - - if (!data) { - return data; - } + if (end > start) { + utftext += string.slice(start, stringl); + } - data = this.utf8_encode(data + ''); + return utftext; + }; - do { // pack three octets into four hexets - o1 = data.charCodeAt(i++); - o2 = data.charCodeAt(i++); - o3 = data.charCodeAt(i++); + this.base64_decode = function (data) { + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window['atob'] == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } - bits = o1 << 16 | o2 << 8 | o3; + data += ''; - h1 = bits >> 18 & 0x3f; - h2 = bits >> 12 & 0x3f; - h3 = bits >> 6 & 0x3f; - h4 = bits & 0x3f; + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); - // use hexets to index into b64, and append result to encoded string - tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); - } while (i < data.length); + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - enc = tmp_arr.join(''); + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; - switch (data.length % 3) { - case 1: - enc = enc.slice(0, -2) + '=='; - break; - case 2: - enc = enc.slice(0, -1) + '='; - break; - } + if (h3 === 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 === 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); - return enc; - }; + dec = tmp_arr.join(''); - /** - * encode string in url by base64 - * @param {String} string in url - * @return {String} encoded string - */ - this.URLSafeBase64Encode = function(v) { - v = this.base64_encode(v); - return v.replace(/\//g, '_').replace(/\+/g, '-'); - }; + return dec; + }; - this.URLSafeBase64Decode = function(v) { - v = v.replace(/_/g, '/').replace(/-/g, '+'); - return this.base64_decode(v); - }; + /** + * encode data by base64 + * @param {String} data to encode + * @return {String} encoded data + */ + this.base64_encode = function (data) { + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // - depends on: this.utf8_encode + // * example 1: this.base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window['atob'] == 'function') { + // return atob(data); + //} + var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = '', + tmp_arr = []; + + if (!data) { + return data; + } - // TODO: use mOxie - /** - * craete object used to AJAX - * @return {Object} - */ - this.createAjax = function(argument) { - var xmlhttp = {}; - if (window.XMLHttpRequest) { - xmlhttp = new XMLHttpRequest(); - } else { - xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); - } - return xmlhttp; - }; + data = this.utf8_encode(data + ''); - // TODO: enhance IE compatibility - /** - * parse json string to javascript object - * @param {String} json string - * @return {Object} object - */ - this.parseJSON = function(data) { - // Attempt to parse using the native JSON parser first - if (window.JSON && window.JSON.parse) { - return window.JSON.parse(data); - } + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); - //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; + bits = o1 << 16 | o2 << 8 | o3; - //var json; + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; - 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); - }); - } + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); - // todo 使用一下判断,增加安全性 - //if ( - // rx_one.test( - // text - // .replace(rx_two, '@') - // .replace(rx_three, ']') - // .replace(rx_four, '') - // ) - //) { - // return eval('(' + text + ')'); - //} - - return eval('('+text+')'); - }; + enc = tmp_arr.join(''); - /** - * 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; - } - }; + switch (data.length % 3) { + case 1: + enc = enc.slice(0, -2) + '=='; + break; + case 2: + enc = enc.slice(0, -1) + '='; + break; + } - /** - * trim space beside text - * @param {String} untrimed string - * @return {String} trimed string - */ - this.trim = function(text) { - return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); - }; + return enc; + }; - /** - * create a uploader by QiniuJsSDK - * @param {object} options to create a new uploader - * @return {object} uploader - */ - this.uploader = function(op) { + /** + * encode string in url by base64 + * @param {String} string in url + * @return {String} encoded string + */ + this.URLSafeBase64Encode = function (v) { + v = this.base64_encode(v); + return v.replace(/\//g, '_').replace(/\+/g, '-'); + }; - /********** inner function define start **********/ + this.URLSafeBase64Decode = function (v) { + v = v.replace(/_/g, '/').replace(/-/g, '+'); + return this.base64_decode(v); + }; - // according the different condition to reset chunk size - // and the upload strategy according with the chunk size - // when chunk size is zero will cause to direct upload - // see the statement binded on 'BeforeUpload' event - var reset_chunk_size = function() { - var ie = that.detectIEVersion(); - var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; - // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true - var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); - // case IE 9-,chunk_size is not empty and flash is included in runtimes - // set op.chunk_size to zero - //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { - if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { - // link: http://www.plupload.com/docs/Frequently-Asked-Questions#when-to-use-chunking-and-when-not - // when plupload chunk_size setting is't null ,it cause bug in ie8/9 which runs flash runtimes (not support html5) . - op.chunk_size = 0; - } else if (isSpecialSafari) { - // win7 safari / iOS7 safari have bug when in chunk upload mode - // reset chunk_size to 0 - // disable chunk in special version safari - op.chunk_size = 0; + // TODO: use mOxie + /** + * craete object used to AJAX + * @return {Object} + */ + this.createAjax = function (argument) { + var xmlhttp = {}; + if (window.XMLHttpRequest) { + xmlhttp = new XMLHttpRequest(); } else { - BLOCK_BITS = 20; - MAX_CHUNK_SIZE = 4 << BLOCK_BITS; //4M - - chunk_size = plupload.parseSize(op.chunk_size); - if (chunk_size > MAX_CHUNK_SIZE) { - op.chunk_size = MAX_CHUNK_SIZE; - } - // qiniu service max_chunk_size is 4m - // reset chunk_size to max_chunk_size(4m) when chunk_size > 4m + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } - // if op.chunk_size set 0 will be cause to direct upload + return xmlhttp; }; - var getHosts = function(hosts) { - var result = []; - var uploadIndex = -1; - for (var i = 0; i < hosts.length; i++) { - var host = hosts[i]; - if (host.indexOf("upload") !== -1) { - uploadIndex = i; - } - if (host.indexOf('-H') === 0) { - result.push(host.split(' ')[2]); - } else { - result.push(host); - } + // TODO: enhance IE compatibility + /** + * parse json string to javascript object + * @param {String} json string + * @return {Object} object + */ + this.parseJSON = function (data) { + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); } - if (uploadIndex !== -1) { - //make upload domains first - var uploadDomain = result[uploadIndex]; - result[uploadIndex] = result[0]; - result[0] = uploadDomain; - } - return result; - }; + //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 getPutPolicy = function (uptoken) { - var segments = uptoken.split(":"); - var ak = segments[0]; - var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); - putPolicy.ak = ak; - if (putPolicy.scope.indexOf(":") >= 0) { - putPolicy.bucket = putPolicy.scope.split(":")[0]; - putPolicy.key = putPolicy.scope.split(":")[1]; - } else { - putPolicy.bucket = putPolicy.scope; + //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); + }); } - return putPolicy; + + // todo 使用一下判断,增加安全性 + //if ( + // rx_one.test( + // text + // .replace(rx_two, '@') + // .replace(rx_three, ']') + // .replace(rx_four, '') + // ) + //) { + // return eval('(' + text + ')'); + //} + + return eval('(' + text + ')'); }; - var getUpHosts = function(uptoken) { - var putPolicy = getPutPolicy(uptoken); - // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; - // IE9 does not support protocol relative url - var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; - logger.debug("putPolicy: ", putPolicy); - logger.debug("get uphosts from: ", uphosts_url); - var ie = that.detectIEVersion(); - var ajax; - if (ie && ie <= 9) { - ajax = new moxie.xhr.XMLHttpRequest(); - moxie.core.utils.Env.swf_url = op.flash_swf_url; - }else{ - ajax = that.createAjax(); + /** + * 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); } - ajax.open('GET', uphosts_url, false); - var onreadystatechange = function(){ - logger.debug("ajax.readyState: ", ajax.readyState); - if (ajax.readyState === 4) { - logger.debug("ajax.status: ", ajax.status); - if (ajax.status < 400) { - var res = that.parseJSON(ajax.responseText); - qiniuUpHosts.http = getHosts(res.http.up); - qiniuUpHosts.https = getHosts(res.https.up); - logger.debug("get new uphosts: ", qiniuUpHosts); - that.resetUploadUrl(); + 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 { - logger.error("get uphosts error: ", ajax.responseText); + var string = []; + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + string.push(that.stringifyJSON(property) + ':' + that.stringifyJSON(obj[property])); + } + } + return '{' + string.join(',') + '}'; } - } - }; - if (ie && ie <= 9) { - ajax.bind('readystatechange', onreadystatechange); - }else{ - ajax.onreadystatechange = onreadystatechange; + break; + case 'number': + return obj; + case false: + return obj; + case 'boolean': + return obj; } - ajax.send(); - // ajax.send(); - // if (ajax.status < 400) { - // var res = that.parseJSON(ajax.responseText); - // qiniuUpHosts.http = getHosts(res.http.up); - // qiniuUpHosts.https = getHosts(res.https.up); - // logger.debug("get new uphosts: ", qiniuUpHosts); - // that.resetUploadUrl(); - // } else { - // logger.error("get uphosts error: ", ajax.responseText); - // } - return; }; - var getUptoken = function(file) { - if (!that.token || (op.uptoken_url && that.tokenInfo.isExpired())) { - return getNewUpToken(file); - } else { - return that.token; - } + /** + * trim space beside text + * @param {String} untrimed string + * @return {String} trimed string + */ + this.trim = function (text) { + return text === null ? "" : text.replace(/^\s+|\s+$/g, ''); }; - // getNewUptoken maybe called at Init Event or BeforeUpload Event - // case Init Event, the file param of getUptken will be set a null value - // if op.uptoken has value, set uptoken with op.uptoken - // else if op.uptoken_url has value, set uptoken from op.uptoken_url - // else if op.uptoken_func has value, set uptoken by result of op.uptoken_func - var getNewUpToken = function(file) { - if (op.uptoken) { - that.token = op.uptoken; - } else if (op.uptoken_url) { - logger.debug("get uptoken from: ", that.uptoken_url); - // TODO: use mOxie - var ajax = that.createAjax(); - ajax.open('GET', that.uptoken_url + '?' + (+ new Date()), false); - // ajax.setRequestHeader("If-Modified-Since", "0"); - // ajax.onreadystatechange = function() { - // if (ajax.readyState === 4 && ajax.status === 200) { - // var res = that.parseJSON(ajax.responseText); - // that.token = res.uptoken; - // } - // }; - ajax.send(); - if (ajax.status === 200) { - var res = that.parseJSON(ajax.responseText); - that.token = res.uptoken; - var segments = that.token.split(":"); - var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); - if (!that.tokenMap) { - that.tokenMap = {}; + /** + * create a uploader by QiniuJsSDK + * @param {object} options to create a new uploader + * @return {object} uploader + */ + this.uploader = function (op) { + + /********** inner function define start **********/ + + // according the different condition to reset chunk size + // and the upload strategy according with the chunk size + // when chunk size is zero will cause to direct upload + // see the statement binded on 'BeforeUpload' event + var reset_chunk_size = function () { + var ie = that.detectIEVersion(); + var BLOCK_BITS, MAX_CHUNK_SIZE, chunk_size; + // case Safari 5、Windows 7、iOS 7 set isSpecialSafari to true + var isSpecialSafari = (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.version <= 5 && moxie.core.utils.Env.os === "Windows" && moxie.core.utils.Env.osVersion === "7") || (moxie.core.utils.Env.browser === "Safari" && moxie.core.utils.Env.os === "iOS" && moxie.core.utils.Env.osVersion === "7"); + // case IE 9-,chunk_size is not empty and flash is included in runtimes + // set op.chunk_size to zero + //if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { + if (ie && ie < 9 && op.chunk_size && op.runtimes.indexOf('flash') >= 0) { + // link: http://www.plupload.com/docs/Frequently-Asked-Questions#when-to-use-chunking-and-when-not + // when plupload chunk_size setting is't null ,it cause bug in ie8/9 which runs flash runtimes (not support html5) . + op.chunk_size = 0; + } else if (isSpecialSafari) { + // win7 safari / iOS7 safari have bug when in chunk upload mode + // reset chunk_size to 0 + // disable chunk in special version safari + op.chunk_size = 0; + } else { + BLOCK_BITS = 20; + MAX_CHUNK_SIZE = 4 << BLOCK_BITS; //4M + + chunk_size = plupload.parseSize(op.chunk_size); + if (chunk_size > MAX_CHUNK_SIZE) { + op.chunk_size = MAX_CHUNK_SIZE; } - var getTimestamp = function(time) { - return Math.ceil(time.getTime()/1000); - }; - var serverTime = getTimestamp(new Date(ajax.getResponseHeader("date"))); - var clientTime = getTimestamp(new Date()); - that.tokenInfo = { - serverDelay: clientTime - serverTime, - deadline: putPolicy.deadline, - isExpired: function() { - var leftTime = this.deadline - getTimestamp(new Date()) + this.serverDelay; - return leftTime < 600; - } - }; - logger.debug("get new uptoken: ", that.token); - logger.debug("get token info: ", that.tokenInfo); + // qiniu service max_chunk_size is 4m + // reset chunk_size to max_chunk_size(4m) when chunk_size > 4m + } + // if op.chunk_size set 0 will be cause to direct upload + }; + + var getHosts = function (hosts) { + var result = []; + var uploadIndex = -1; + for (var i = 0; i < hosts.length; i++) { + var host = hosts[i]; + if (host.indexOf("upload") !== -1) { + uploadIndex = i; + } + if (host.indexOf('-H') === 0) { + result.push(host.split(' ')[2]); + } else { + result.push(host); + } + } + + if (uploadIndex !== -1) { + //make upload domains first + var uploadDomain = result[uploadIndex]; + result[uploadIndex] = result[0]; + result[0] = uploadDomain; + } + return result; + }; + + var getPutPolicy = function (uptoken) { + var segments = uptoken.split(":"); + var ak = segments[0]; + var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); + putPolicy.ak = ak; + if (putPolicy.scope.indexOf(":") >= 0) { + putPolicy.bucket = putPolicy.scope.split(":")[0]; + putPolicy.key = putPolicy.scope.split(":")[1]; } else { - logger.error("get uptoken error: ", ajax.responseText); + putPolicy.bucket = putPolicy.scope; } - } else if (op.uptoken_func) { - logger.debug("get uptoken from uptoken_func"); - that.token = op.uptoken_func(file); - logger.debug("get new uptoken: ", that.token); - } else { - logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!"); - } - if (that.token) { - getUpHosts(that.token); - } - return that.token; - }; + return putPolicy; + }; - // get file key according with the user passed options - var getFileKey = function(up, file, func) { - // WARNING - // When you set the key in putPolicy by "scope": "bucket:key" - // You should understand the risk of override a file in the bucket - // So the code below that automatically get key from uptoken has been commented - // var putPolicy = getPutPolicy(that.token) - // if (putPolicy.key) { - // logger.debug("key is defined in putPolicy.scope: ", putPolicy.key) - // return putPolicy.key - // } - var key = '', - unique_names = false; - if (!op.save_key) { - unique_names = up.getOption && up.getOption('unique_names'); - unique_names = unique_names || (up.settings && up.settings.unique_names); - if (unique_names) { - var ext = that.getFileExtension(file.name); - key = ext ? file.id + '.' + ext : file.id; - } else if (typeof func === 'function') { - key = func(up, file); + var getUpHosts = function (uptoken) { + var putPolicy = getPutPolicy(uptoken); + // var uphosts_url = "//uc.qbox.me/v1/query?ak="+ak+"&bucket="+putPolicy.scope; + // IE9 does not support protocol relative url + var uphosts_url = window.location.protocol + "//uc.qbox.me/v1/query?ak=" + putPolicy.ak + "&bucket=" + putPolicy.bucket; + logger.debug("putPolicy: ", putPolicy); + logger.debug("get uphosts from: ", uphosts_url); + var ie = that.detectIEVersion(); + var ajax; + if (ie && ie <= 9) { + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; } else { - key = file.name; + ajax = that.createAjax(); } - } - return key; - }; + ajax.open('GET', uphosts_url, false); + var onreadystatechange = function () { + logger.debug("ajax.readyState: ", ajax.readyState); + if (ajax.readyState === 4) { + logger.debug("ajax.status: ", ajax.status); + if (ajax.status < 400) { + var res = that.parseJSON(ajax.responseText); + qiniuUpHosts.http = getHosts(res.http.up); + qiniuUpHosts.https = getHosts(res.https.up); + logger.debug("get new uphosts: ", qiniuUpHosts); + that.resetUploadUrl(); + } else { + logger.error("get uphosts error: ", ajax.responseText); + } + } + }; + if (ie && ie <= 9) { + ajax.bind('readystatechange', onreadystatechange); + } else { + ajax.onreadystatechange = onreadystatechange; + } + ajax.send(); + // ajax.send(); + // if (ajax.status < 400) { + // var res = that.parseJSON(ajax.responseText); + // qiniuUpHosts.http = getHosts(res.http.up); + // qiniuUpHosts.https = getHosts(res.https.up); + // logger.debug("get new uphosts: ", qiniuUpHosts); + // that.resetUploadUrl(); + // } else { + // logger.error("get uphosts error: ", ajax.responseText); + // } + return; + }; - /********** inner function define end **********/ + var getUptoken = function (file) { + if (!that.token || (op.uptoken_url && that.tokenInfo.isExpired())) { + return getNewUpToken(file); + } else { + return that.token; + } + }; - if (op.log_level) { - logger.level = op.log_level; - } + // getNewUptoken maybe called at Init Event or BeforeUpload Event + // case Init Event, the file param of getUptken will be set a null value + // if op.uptoken has value, set uptoken with op.uptoken + // else if op.uptoken_url has value, set uptoken from op.uptoken_url + // else if op.uptoken_func has value, set uptoken by result of op.uptoken_func + var getNewUpToken = function (file) { + if (op.uptoken) { + that.token = op.uptoken; + } else if (op.uptoken_url) { + logger.debug("get uptoken from: ", that.uptoken_url); + // TODO: use mOxie + var ajax = that.createAjax(); + ajax.open('GET', that.uptoken_url + '?' + (+new Date()), false); + // ajax.setRequestHeader("If-Modified-Since", "0"); + // ajax.onreadystatechange = function() { + // if (ajax.readyState === 4 && ajax.status === 200) { + // var res = that.parseJSON(ajax.responseText); + // that.token = res.uptoken; + // } + // }; + ajax.send(); + if (ajax.status === 200) { + var res = that.parseJSON(ajax.responseText); + that.token = res.uptoken; + var segments = that.token.split(":"); + var putPolicy = that.parseJSON(that.URLSafeBase64Decode(segments[2])); + if (!that.tokenMap) { + that.tokenMap = {}; + } + var getTimestamp = function (time) { + return Math.ceil(time.getTime() / 1000); + }; + var serverTime = getTimestamp(new Date(ajax.getResponseHeader("date"))); + var clientTime = getTimestamp(new Date()); + that.tokenInfo = { + serverDelay: clientTime - serverTime, + deadline: putPolicy.deadline, + isExpired: function () { + var leftTime = this.deadline - getTimestamp(new Date()) + this.serverDelay; + return leftTime < 600; + } + }; + logger.debug("get new uptoken: ", that.token); + logger.debug("get token info: ", that.tokenInfo); + } else { + logger.error("get uptoken error: ", ajax.responseText); + } + } else if (op.uptoken_func) { + logger.debug("get uptoken from uptoken_func"); + that.token = op.uptoken_func(file); + logger.debug("get new uptoken: ", that.token); + } else { + logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!"); + } + if (that.token) { + getUpHosts(that.token); + } + return that.token; + }; - if (!op.domain) { - throw 'domain setting in options is required!'; - } + // get file key according with the user passed options + var getFileKey = function (up, file, func) { + // WARNING + // When you set the key in putPolicy by "scope": "bucket:key" + // You should understand the risk of override a file in the bucket + // So the code below that automatically get key from uptoken has been commented + // var putPolicy = getPutPolicy(that.token) + // if (putPolicy.key) { + // logger.debug("key is defined in putPolicy.scope: ", putPolicy.key) + // return putPolicy.key + // } + var key = '', + unique_names = false; + if (!op.save_key) { + unique_names = up.getOption && up.getOption('unique_names'); + unique_names = unique_names || (up.settings && up.settings.unique_names); + if (unique_names) { + var ext = that.getFileExtension(file.name); + key = ext ? file.id + '.' + ext : file.id; + } else if (typeof func === 'function') { + key = func(up, file); + } else { + key = file.name; + } + } + return key; + }; - if (!op.browse_button) { - throw 'browse_button setting in options is required!'; - } + var getDomainFromUrl = function (url) { + if (url && url.match) { + var groups = url.match(/^https?:\/\/([^:^/]*)/); + return groups ? groups[1] : ""; + } + return ""; + }; - if (!op.uptoken && !op.uptoken_url && !op.uptoken_func) { - throw 'one of [uptoken, uptoken_url, uptoken_func] settings in options is required!'; - } + var getPortFromUrl = function (url) { + if (url && url.match) { + var groups = url.match(/(^https?)/); + if (!groups) { + return ""; + } + var type = groups[1]; + groups = url.match(/^https?:\/\/([^:^/]*):(\d*)/); + if (groups) { + return groups[2]; + } else if (type === "http") { + return "80"; + } else { + return "443"; + } + } + return ""; + }; - logger.debug("init uploader start"); + /********** inner function define end **********/ - logger.debug("environment: ", moxie.core.utils.Env); + if (op.log_level) { + logger.level = op.log_level; + } - logger.debug("userAgent: ", navigator.userAgent); + if (!op.domain) { + throw 'domain setting in options is required!'; + } - var option = {}; + if (!op.browse_button) { + throw 'browse_button setting in options is required!'; + } - // hold the handler from user passed options - var _Error_Handler = op.init && op.init.Error; - var _FileUploaded_Handler = op.init && op.init.FileUploaded; + if (!op.uptoken && !op.uptoken_url && !op.uptoken_func) { + throw 'one of [uptoken, uptoken_url, uptoken_func] settings in options is required!'; + } - // replace the handler for intercept - op.init.Error = function() {}; - op.init.FileUploaded = function() {}; + logger.debug("init uploader start"); - that.uptoken_url = op.uptoken_url; - that.token = ''; - that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : ''; - this.domain = op.domain; - // TODO: ctx is global in scope of a uploader instance - // this maybe cause error - var ctx = ''; - var speedCalInfo = { - isResumeUpload: false, - resumeFilesize: 0, - startTime: '', - currentTime: '' - }; + logger.debug("environment: ", moxie.core.utils.Env); - reset_chunk_size(); - logger.debug("invoke reset_chunk_size()"); - logger.debug("op.chunk_size: ", op.chunk_size); + logger.debug("userAgent: ", navigator.userAgent); - var defaultSetting = { - url: qiniuUploadUrl, - multipart_params: { - token: '' - } - }; - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - defaultSetting.multipart_params.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); - } + var option = {}; - // compose options with user passed options and default setting - plupload.extend(option, op, defaultSetting); + // hold the handler from user passed options + var _Error_Handler = op.init && op.init.Error; + var _FileUploaded_Handler = op.init && op.init.FileUploaded; - logger.debug("option: ", option); + // replace the handler for intercept + op.init.Error = function () {}; + op.init.FileUploaded = function () {}; - // create a new uploader with composed options - var uploader = new plupload.Uploader(option); + that.uptoken_url = op.uptoken_url; + that.token = ''; + that.key_handler = typeof op.init.Key === 'function' ? op.init.Key : ''; + this.domain = op.domain; + // TODO: ctx is global in scope of a uploader instance + // this maybe cause error + var ctx = ''; + var speedCalInfo = { + isResumeUpload: false, + resumeFilesize: 0, + startTime: '', + currentTime: '' + }; - logger.debug("new plupload.Uploader(option)"); + reset_chunk_size(); + logger.debug("invoke reset_chunk_size()"); + logger.debug("op.chunk_size: ", op.chunk_size); - // bind getNewUpToken to 'Init' event - uploader.bind('Init', function(up, params) { - logger.debug("Init event activated"); - // if op.get_new_uptoken is not true - // invoke getNewUptoken when uploader init - // else - // getNewUptoken everytime before a new file upload - if(!op.get_new_uptoken){ - getNewUpToken(null); - } - //getNewUpToken(null); - }); - - 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); - - // detect is iOS - var is_ios = function (){ - if(moxie.core.utils.Env.OS.toLowerCase()==="ios") { - return true; - } else { - return false; + var defaultSetting = { + url: qiniuUploadUrl, + multipart_params: { + token: '' } }; - - // if current env os is iOS change file name to [time].[ext] - if (is_ios()) { - for (var i = 0; i < files.length; i++) { - var file = files[i]; - var ext = that.getFileExtension(file.name); - file.name = file.id + "." + ext; - } + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + defaultSetting.multipart_params.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); } - if (auto_start) { - 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 = ''; - - if(op.get_new_uptoken){ - getNewUpToken(file); - } + // compose options with user passed options and default setting + plupload.extend(option, op, defaultSetting); - var directUpload = function(up, file, func) { - speedCalInfo.startTime = new Date().getTime(); - var multipart_params_obj; - if (op.save_key) { - multipart_params_obj = { - 'token': that.token - }; - } else { - multipart_params_obj = { - 'key': getFileKey(up, file, func), - 'token': that.token - }; - } - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - multipart_params_obj.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); + logger.debug("option: ", option); + + // create a new uploader with composed options + var uploader = new plupload.Uploader(option); + + logger.debug("new plupload.Uploader(option)"); + + // bind getNewUpToken to 'Init' event + uploader.bind('Init', function (up, params) { + logger.debug("Init event activated"); + // if op.get_new_uptoken is not true + // invoke getNewUptoken when uploader init + // else + // getNewUptoken everytime before a new file upload + if (!op.get_new_uptoken) { + getNewUpToken(null); } + //getNewUpToken(null); + }); - logger.debug("directUpload multipart_params_obj: ", multipart_params_obj); + 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); + + // detect is iOS + var is_ios = function () { + if (moxie.core.utils.Env.OS.toLowerCase() === "ios") { + return true; + } else { + return false; + } + }; - var x_vars = op.x_vars; - if (x_vars !== undefined && typeof x_vars === 'object') { - for (var x_key in x_vars) { - if (x_vars.hasOwnProperty(x_key)) { - if (typeof x_vars[x_key] === 'function') { - multipart_params_obj['x:' + x_key] = x_vars[x_key](up, file); - } else if (typeof x_vars[x_key] !== 'object') { - multipart_params_obj['x:' + x_key] = x_vars[x_key]; - } - } + // if current env os is iOS change file name to [time].[ext] + if (is_ios()) { + for (var i = 0; i < files.length; i++) { + var file = files[i]; + var ext = that.getFileExtension(file.name); + file.name = file.id + "." + ext; } } - up.setOption({ - 'url': qiniuUploadUrl, - 'multipart': true, - 'chunk_size': is_android_weixin_or_qq() ? op.max_file_size : undefined, - 'multipart_params': multipart_params_obj - }); - }; + if (auto_start) { + 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 + }); - // 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.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase()==="android") { - return true; - } else { - return false; + 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"); + file._start_at = new Date(); + // add a key named speed for file object + file.speed = file.speed || 0; + ctx = ''; + + if (op.get_new_uptoken) { + getNewUpToken(file); } - }; - var chunk_size = up.getOption && up.getOption('chunk_size'); - chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + var directUpload = function (up, file, func) { + speedCalInfo.startTime = new Date().getTime(); + var multipart_params_obj; + if (op.save_key) { + multipart_params_obj = { + 'token': that.token + }; + } else { + multipart_params_obj = { + 'key': getFileKey(up, file, func), + 'token': that.token + }; + } + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + multipart_params_obj.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); + } - logger.debug("uploader.runtime: ",uploader.runtime); - logger.debug("chunk_size: ",chunk_size); + logger.debug("directUpload multipart_params_obj: ", multipart_params_obj); - // TODO: flash support chunk upload - 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 { - // TODO: need a polifill to make it work in IE 9- - // ISSUE: if file.name is existed in localStorage - // but not the same file maybe cause error - var localFileInfo = localStorage.getItem(file.name); - var blockSize = chunk_size; - if (localFileInfo) { - // TODO: although only the html5 runtime will enter this statement - // but need uniform way to make convertion between string and json - localFileInfo = that.parseJSON(localFileInfo); - var now = (new Date()).getTime(); - var before = localFileInfo.time || 0; - var aDay = 24 * 60 * 60 * 1000; // milliseconds of one day - // if the last upload time is within one day - // will upload continuously follow the last breakpoint - // else - // will reupload entire file - if (now - before < aDay) { - - if (localFileInfo.percent !== 100) { - if (file.size === localFileInfo.total) { - // TODO: if file.name and file.size is the same - // but not the same file will cause error - file.percent = localFileInfo.percent; - file.loaded = localFileInfo.offset; - ctx = localFileInfo.ctx; - - // set speed info - speedCalInfo.isResumeUpload = true; - speedCalInfo.resumeFilesize = localFileInfo.offset; - - // set block size - if (localFileInfo.offset + blockSize > file.size) { - blockSize = file.size - localFileInfo.offset; + var x_vars = op.x_vars; + if (x_vars !== undefined && typeof x_vars === 'object') { + for (var x_key in x_vars) { + if (x_vars.hasOwnProperty(x_key)) { + if (typeof x_vars[x_key] === 'function') { + multipart_params_obj['x:' + x_key] = x_vars[x_key](up, file); + } else if (typeof x_vars[x_key] !== 'object') { + multipart_params_obj['x:' + x_key] = x_vars[x_key]; + } + } + } + } + + up.setOption({ + 'url': qiniuUploadUrl, + 'multipart': true, + 'chunk_size': is_android_weixin_or_qq() ? op.max_file_size : undefined, + 'multipart_params': multipart_params_obj + }); + }; + + // 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.core.utils.Env.browser === "QQBrowser" || ua.match(/V1_AND_SQ/i)) && moxie.core.utils.Env.OS.toLowerCase() === "android") { + return true; + } else { + return false; + } + }; + + 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' || 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 { + // TODO: need a polifill to make it work in IE 9- + // ISSUE: if file.name is existed in localStorage + // but not the same file maybe cause error + var localFileInfo = localStorage.getItem(file.name); + var blockSize = chunk_size; + if (localFileInfo) { + // TODO: although only the html5 runtime will enter this statement + // but need uniform way to make convertion between string and json + localFileInfo = that.parseJSON(localFileInfo); + var now = (new Date()).getTime(); + var before = localFileInfo.time || 0; + var aDay = 24 * 60 * 60 * 1000; // milliseconds of one day + // if the last upload time is within one day + // will upload continuously follow the last breakpoint + // else + // will reupload entire file + if (now - before < aDay) { + + if (localFileInfo.percent !== 100) { + if (file.size === localFileInfo.total) { + // TODO: if file.name and file.size is the same + // but not the same file will cause error + file.percent = localFileInfo.percent; + file.loaded = localFileInfo.offset; + ctx = localFileInfo.ctx; + + // set speed info + speedCalInfo.isResumeUpload = true; + speedCalInfo.resumeFilesize = localFileInfo.offset; + + // set block size + if (localFileInfo.offset + blockSize > file.size) { + blockSize = file.size - localFileInfo.offset; + } + } else { + // remove file info when file.size is conflict with file info + localStorage.removeItem(file.name); } + } else { - // remove file info when file.size is conflict with file info + // remove file info when upload percent is 100% + // avoid 499 bug localStorage.removeItem(file.name); } - } else { - // remove file info when upload percent is 100% - // avoid 499 bug + // remove file info when last upload time is over one day localStorage.removeItem(file.name); } - } else { - // remove file info when last upload time is over one day - localStorage.removeItem(file.name); } + speedCalInfo.startTime = new Date().getTime(); + var multipart_params_obj = {}; + var ie = that.detectIEVersion(); + // case IE 9- + // add accept in multipart params + if (ie && ie <= 9) { + multipart_params_obj.accept = 'text/plain; charset=utf-8'; + logger.debug("add accept text/plain in multipart params"); + } + // TODO: to support bput + // http://developer.qiniu.com/docs/v6/api/reference/up/bput.html + up.setOption({ + 'url': qiniuUploadUrl + '/mkblk/' + blockSize, + 'multipart': false, + 'chunk_size': chunk_size, + 'required_features': "chunks", + 'headers': { + 'Authorization': 'UpToken ' + getUptoken(file) + }, + 'multipart_params': multipart_params_obj + }); } - speedCalInfo.startTime = new Date().getTime(); - var multipart_params_obj = {}; - var ie = that.detectIEVersion(); - // case IE 9- - // add accept in multipart params - if (ie && ie <= 9) { - multipart_params_obj.accept = 'text/plain; charset=utf-8'; - logger.debug("add accept text/plain in multipart params"); - } - // TODO: to support bput - // http://developer.qiniu.com/docs/v6/api/reference/up/bput.html + } else { + logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !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; + if (speedCalInfo.isResumeUpload) { + fileUploaded = file.loaded - speedCalInfo.resumeFilesize; + } + 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"); + logger.debug("ChunkUploaded file: ", file); + logger.debug("ChunkUploaded info: ", info); + var res = that.parseJSON(info.response); + logger.debug("ChunkUploaded res: ", res); + // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' + ctx = ctx ? ctx + ',' + res.ctx : res.ctx; + var leftSize = info.total - info.offset; + var chunk_size = up.getOption && up.getOption('chunk_size'); + chunk_size = chunk_size || (up.settings && up.settings.chunk_size); + if (leftSize < chunk_size) { up.setOption({ - 'url': qiniuUploadUrl + '/mkblk/' + blockSize, - 'multipart': false, - 'chunk_size': chunk_size, - 'required_features': "chunks", - 'headers': { - 'Authorization': 'UpToken ' + getUptoken(file) - }, - 'multipart_params': multipart_params_obj + 'url': qiniuUploadUrl + '/mkblk/' + leftSize }); + logger.debug("up.setOption url: ", qiniuUploadUrl + '/mkblk/' + leftSize); } - } else { - logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !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; - if (speedCalInfo.isResumeUpload) { - fileUploaded = file.loaded - speedCalInfo.resumeFilesize; - } - 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"); - logger.debug("ChunkUploaded file: ", file); - logger.debug("ChunkUploaded info: ", info); - var res = that.parseJSON(info.response); - logger.debug("ChunkUploaded res: ", res); - // ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...' - ctx = ctx ? ctx + ',' + res.ctx : res.ctx; - var leftSize = info.total - info.offset; - var chunk_size = up.getOption && up.getOption('chunk_size'); - chunk_size = chunk_size || (up.settings && up.settings.chunk_size); - if (leftSize < chunk_size) { up.setOption({ - 'url': qiniuUploadUrl + '/mkblk/' + leftSize + 'headers': { + 'Authorization': 'UpToken ' + getUptoken(file) + } }); - logger.debug("up.setOption url: ", qiniuUploadUrl + '/mkblk/' + leftSize); - } - up.setOption({ - 'headers': { - 'Authorization': 'UpToken ' + getUptoken(file) - } + localStorage.setItem(file.name, that.stringifyJSON({ + ctx: ctx, + percent: file.percent, + total: info.total, + offset: info.offset, + time: (new Date()).getTime() + })); }); - localStorage.setItem(file.name, that.stringifyJSON({ - ctx: ctx, - percent: file.percent, - total: info.total, - offset: info.offset, - time: (new Date()).getTime() - })); - }); - - logger.debug("bind ChunkUploaded event"); - - var retries = qiniuUploadUrls.length; - - // if error is unkown switch upload url and retry - var unknow_error_retry = function(file){ - if (retries-- > 0) { - setTimeout(function(){ - that.resetUploadUrl(); - file.status = plupload.QUEUED; - uploader.stop(); - uploader.start(); - }, 0); - return true; - }else{ - retries = qiniuUploadUrls.length; - return false; - } - }; - // 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) { - switch (err.code) { - case plupload.FAILED: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.FILE_SIZE_ERROR: - var max_file_size = up.getOption && up.getOption('max_file_size'); - max_file_size = max_file_size || (up.settings && up.settings.max_file_size); - errTip = '浏览器最大可上传' + max_file_size + '。更大文件请使用命令行工具。'; - break; - case plupload.FILE_EXTENSION_ERROR: - errTip = '文件验证失败。请稍后重试。'; - break; - case plupload.HTTP_ERROR: - if (err.response === '') { - // Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE - errTip = err.message || '未知网络错误。'; - if (!unknow_error_retry(file)) { - return; - } + logger.debug("bind ChunkUploaded event"); + + var retries = qiniuUploadUrls.length; + + // if error is unkown switch upload url and retry + var unknow_error_retry = function (file) { + if (retries-- > 0) { + setTimeout(function () { + that.resetUploadUrl(); + file.status = plupload.QUEUED; + uploader.stop(); + uploader.start(); + }, 0); + return true; + } else { + retries = qiniuUploadUrls.length; + return false; + } + }; + + // 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 nowTime = new Date(); + var errTip = ''; + var file = err.file; + if (file) { + switch (err.code) { + case plupload.FAILED: + errTip = '上传失败。请稍后再试。'; break; - } - var errorObj = that.parseJSON(err.response); - var errorText = errorObj.error; - switch (err.status) { - case 400: - errTip = "请求报文格式错误。"; - break; - case 401: - errTip = "客户端认证授权失败。请重试或提交反馈。"; - break; - case 405: - errTip = "客户端请求错误。请重试或提交反馈。"; - break; - case 579: - errTip = "资源上传成功,但回调失败。"; - break; - case 599: - errTip = "网络连接异常。请重试或提交反馈。"; - if (!unknow_error_retry(file)) { - return; - } - break; - case 614: - errTip = "文件已存在。"; - try { - errorObj = that.parseJSON(errorObj.error); - errorText = errorObj.error || 'file exists'; - } catch (e) { - errorText = errorObj.error || 'file exists'; - } - break; - case 631: - errTip = "指定空间不存在。"; - break; - case 701: - errTip = "上传数据块校验出错。请重试或提交反馈。"; - break; - default: - errTip = "未知错误。"; + case plupload.FILE_SIZE_ERROR: + var max_file_size = up.getOption && up.getOption('max_file_size'); + max_file_size = max_file_size || (up.settings && up.settings.max_file_size); + errTip = '浏览器最大可上传' + max_file_size + '。更大文件请使用命令行工具。'; + break; + case plupload.FILE_EXTENSION_ERROR: + errTip = '文件验证失败。请稍后重试。'; + break; + case plupload.HTTP_ERROR: + if (err.response === '') { + // Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE + errTip = err.message || '未知网络错误。'; if (!unknow_error_retry(file)) { return; } break; - } - errTip = errTip + '(' + err.status + ':' + errorText + ')'; - break; - case plupload.SECURITY_ERROR: - errTip = '安全配置错误。请联系网站管理员。'; - break; - case plupload.GENERIC_ERROR: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.IO_ERROR: - errTip = '上传失败。请稍后再试。'; - break; - case plupload.INIT_ERROR: - errTip = '网站配置错误。请联系网站管理员。'; - uploader.destroy(); - break; - default: - errTip = err.message + err.details; - if (!unknow_error_retry(file)) { - return; - } - break; + } + var errorObj = that.parseJSON(err.response); + var errorText = errorObj.error; + switch (err.status) { + case 400: + errTip = "请求报文格式错误。"; + break; + case 401: + errTip = "客户端认证授权失败。请重试或提交反馈。"; + break; + case 405: + errTip = "客户端请求错误。请重试或提交反馈。"; + break; + case 579: + errTip = "资源上传成功,但回调失败。"; + break; + case 599: + errTip = "网络连接异常。请重试或提交反馈。"; + if (!unknow_error_retry(file)) { + return; + } + break; + case 614: + errTip = "文件已存在。"; + try { + errorObj = that.parseJSON(errorObj.error); + errorText = errorObj.error || 'file exists'; + } catch (e) { + errorText = errorObj.error || 'file exists'; + } + break; + case 631: + errTip = "指定空间不存在。"; + break; + case 701: + errTip = "上传数据块校验出错。请重试或提交反馈。"; + break; + default: + errTip = "未知错误。"; + if (!unknow_error_retry(file)) { + return; + } + break; + } + errTip = errTip + '(' + err.status + ':' + errorText + ')'; + break; + case plupload.SECURITY_ERROR: + errTip = '安全配置错误。请联系网站管理员。'; + break; + case plupload.GENERIC_ERROR: + errTip = '上传失败。请稍后再试。'; + break; + case plupload.IO_ERROR: + errTip = '上传失败。请稍后再试。'; + break; + case plupload.INIT_ERROR: + errTip = '网站配置错误。请联系网站管理员。'; + uploader.destroy(); + break; + default: + errTip = err.message + err.details; + if (!unknow_error_retry(file)) { + return; + } + break; + } + if (_Error_Handler) { + _Error_Handler(up, err, errTip); + } } - if (_Error_Handler) { - _Error_Handler(up, err, errTip); + up.refresh(); // Reposition Flash/Silverlight + + // add send log for upload error + if (!op.disable_statistics_report) { + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : []; + var req_id = matchedGroups[2]; + var errcode = plupload.HTTP_ERROR ? err.status : err.code; + statisticsLogger.log( + errcode === 0 ? ExtraErrors.NetworkError : errcode, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + nowTime.getTime() - file._start_at.getTime(), + file._start_at.getTime(), + err.file.size * (err.file.percent / 100), + "jssdk-" + up.runtime, + file.size + ); } - } - up.refresh(); // Reposition Flash/Silverlight - }; - })(_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"); - logger.debug("FileUploaded file: ", file); - logger.debug("FileUploaded info: ", info); - var last_step = function(up, file, info) { - logger.debug("FileUploaded last step:",info); - if (op.downtoken_url) { - // if op.dowontoken_url is not empty - // need get downtoken before invoke the _FileUploaded_Handler - 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'); + }; + })(_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"); + logger.debug("FileUploaded file: ", file); + logger.debug("FileUploaded info: ", info); + var nowTime = new Date(); + var last_step = function (up, file, info) { + logger.debug("FileUploaded last step:", info); + if (op.downtoken_url) { + // if op.dowontoken_url is not empty + // need get downtoken before invoke the _FileUploaded_Handler + 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, that.parseJSON(info.response), res_downtoken); + if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); + } + } else { + uploader.trigger('Error', { + status: ajax_downtoken.status, + response: ajax_downtoken.responseText, + file: file, + code: plupload.HTTP_ERROR + }); } - var info_extended = {}; - plupload.extend(info_extended, that.parseJSON(info.response), res_downtoken); - if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); + } + }; + ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); + } else if (_FileUploaded_Handler) { + _FileUploaded_Handler(up, file, info); + } + }; + + var res = that.parseJSON(info.response); + ctx = ctx ? ctx : res.ctx; + // if ctx is not empty + // that means the upload strategy is chunk upload + // before the invoke the last_step + // we need request the mkfile to compose all uploaded chunks + // else + // invoke the last_step + logger.debug("ctx: ", ctx); + if (ctx) { + var key = ''; + logger.debug("save_key: ", op.save_key); + if (!op.save_key) { + key = getFileKey(up, file, that.key_handler); + key = key ? '/key/' + that.URLSafeBase64Encode(key) : ''; + } + + var fname = '/fname/' + that.URLSafeBase64Encode(file.name); + + logger.debug("op.x_vars: ", op.x_vars); + var x_vars = op.x_vars, + x_val = '', + x_vars_url = ''; + if (x_vars !== undefined && typeof x_vars === 'object') { + for (var x_key in x_vars) { + if (x_vars.hasOwnProperty(x_key)) { + if (typeof x_vars[x_key] === 'function') { + x_val = that.URLSafeBase64Encode(x_vars[x_key](up, file)); + } else if (typeof x_vars[x_key] !== 'object') { + x_val = that.URLSafeBase64Encode(x_vars[x_key]); } - } else { - uploader.trigger('Error', { - status: ajax_downtoken.status, - response: ajax_downtoken.responseText, - file: file, - code: plupload.HTTP_ERROR - }); + x_vars_url += '/x:' + x_key + '/' + x_val; } } - }; - ajax_downtoken.send('key=' + that.parseJSON(info.response).key + '&domain=' + op.domain); - } else if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, info); - } - }; - - var res = that.parseJSON(info.response); - ctx = ctx ? ctx : res.ctx; - // if ctx is not empty - // that means the upload strategy is chunk upload - // before the invoke the last_step - // we need request the mkfile to compose all uploaded chunks - // else - // invoke the last_step - logger.debug("ctx: ", ctx); - if (ctx) { - var key = ''; - logger.debug("save_key: ", op.save_key); - if (!op.save_key) { - key = getFileKey(up, file, that.key_handler); - key = key ? '/key/' + that.URLSafeBase64Encode(key) : ''; - } + } - var fname = '/fname/' + that.URLSafeBase64Encode(file.name); + var url = qiniuUploadUrl + '/mkfile/' + file.size + key + fname + x_vars_url; - logger.debug("op.x_vars: ", op.x_vars); - var x_vars = op.x_vars, - x_val = '', - x_vars_url = ''; - if (x_vars !== undefined && typeof x_vars === 'object') { - for (var x_key in x_vars) { - if (x_vars.hasOwnProperty(x_key)) { - if (typeof x_vars[x_key] === 'function') { - x_val = that.URLSafeBase64Encode(x_vars[x_key](up, file)); - } else if (typeof x_vars[x_key] !== 'object') { - x_val = that.URLSafeBase64Encode(x_vars[x_key]); + var ie = that.detectIEVersion(); + var ajax; + if (ie && ie <= 9) { + ajax = new moxie.xhr.XMLHttpRequest(); + moxie.core.utils.Env.swf_url = op.flash_swf_url; + } else { + ajax = that.createAjax(); + } + ajax.open('POST', url, true); + ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); + ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); + var onreadystatechange = function () { + logger.debug("ajax.readyState: ", ajax.readyState); + if (ajax.readyState === 4) { + localStorage.removeItem(file.name); + var ajaxInfo; + if (ajax.status === 200) { + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + responseHeaders: ajax.getAllResponseHeaders(), + }; + logger.debug("mkfile is success: ", ajaxInfo); + last_step(up, file, ajaxInfo); + } else { + ajaxInfo = { + status: ajax.status, + response: ajax.responseText, + file: file, + code: -200, + responseHeaders: ajax.getAllResponseHeaders() + }; + logger.debug("mkfile is error: ", ajaxInfo); + uploader.trigger('Error', ajaxInfo); } - x_vars_url += '/x:' + x_key + '/' + x_val; } + }; + if (ie && ie <= 9) { + ajax.bind('readystatechange', onreadystatechange); + } else { + ajax.onreadystatechange = onreadystatechange; } + ajax.send(ctx); + logger.debug("mkfile: ", url); + } else { + last_step(up, file, info); } - var url = qiniuUploadUrl + '/mkfile/' + file.size + key + fname + x_vars_url; - - var ie = that.detectIEVersion(); - var ajax; - if (ie && ie <= 9) { - ajax = new moxie.xhr.XMLHttpRequest(); - moxie.core.utils.Env.swf_url = op.flash_swf_url; - }else{ - ajax = that.createAjax(); + // send statistics log + if (!op.disable_statistics_report) { + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2]; + statisticsLogger.log( + info.status, + req_id, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + nowTime.getTime() - file._start_at.getTime(), + file._start_at.getTime(), + file.size, + "jssdk-" + up.runtime, + file.size + ); } - ajax.open('POST', url, true); - ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); - ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); - var onreadystatechange = function(){ - logger.debug("ajax.readyState: ", ajax.readyState); - if (ajax.readyState === 4) { - localStorage.removeItem(file.name); - var ajaxInfo; - if (ajax.status === 200) { - ajaxInfo = { - status: ajax.status, - response: ajax.responseText, - responseHeaders: ajax.getAllResponseHeaders(), - }; - logger.debug("mkfile is success: ", ajaxInfo); - last_step(up, file, ajaxInfo); - } else { - ajaxInfo = { - status: ajax.status, - response: ajax.responseText, - file: file, - code: -200, - responseHeaders: ajax.getAllResponseHeaders() - }; - logger.debug("mkfile is error: ", ajaxInfo); - uploader.trigger('Error', ajaxInfo); - } - } - }; - if (ie && ie <= 9) { - ajax.bind('readystatechange', onreadystatechange); - }else{ - ajax.onreadystatechange = onreadystatechange; + }; + })(_FileUploaded_Handler)); + + logger.debug("bind FileUploaded event"); + + // bind 'FilesRemoved' event + // intercept the cancel of upload + // used to send statistics log to server + uploader.bind('FilesRemoved', function (up, files) { + var nowTime = new Date(); + // add cancel log + if (!op.disable_statistics_report) { + for (var i = 0; i < files.length; i++) { + statisticsLogger.log( + ExtraErrors.Cancelled, + undefined, + getDomainFromUrl(up.settings.url), + undefined, + getPortFromUrl(up.settings.url), + nowTime.getTime() - files[i]._start_at.getTime(), + files[i]._start_at.getTime(), + files[i].size, + "jssdk-" + up.runtime, + files[i].size + ); } - ajax.send(ctx); - logger.debug("mkfile: ", url); - } else { - last_step(up, file, info); } + }); - }; - })(_FileUploaded_Handler)); - - logger.debug("bind FileUploaded event"); - - // init uploader - uploader.init(); - logger.debug("invoke uploader.init()"); + logger.debug("bind FilesRemoved event"); - logger.debug("init uploader end"); + // init uploader + uploader.init(); + logger.debug("invoke uploader.init()"); - return uploader; - }; + logger.debug("init uploader end"); - /** - * get url by key - * @param {String} key of file - * @return {String} url of file - */ - this.getUrl = function(key) { - if (!key) { - return false; - } - key = encodeURI(key); - var domain = this.domain; - if (domain.slice(domain.length - 1) !== '/') { - domain = domain + '/'; - } - return domain + key; - }; + return uploader; + }; - /** - * invoke the imageView2 api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.imageView2 = function(op, key) { + /** + * get url by key + * @param {String} key of file + * @return {String} url of file + */ + this.getUrl = function (key) { + if (!key) { + return false; + } + key = encodeURI(key); + var domain = this.domain; + if (domain.slice(domain.length - 1) !== '/') { + domain = domain + '/'; + } + return domain + key; + }; - if (!/^\d$/.test(op.mode)) { - return false; - } + /** + * invoke the imageView2 api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.imageView2 = function (op, key) { - var mode = op.mode, - w = op.w || '', - h = op.h || '', - q = op.q || '', - format = op.format || ''; + if (!/^\d$/.test(op.mode)) { + return false; + } - if (!w && !h) { - return false; - } + var mode = op.mode, + w = op.w || '', + h = op.h || '', + q = op.q || '', + format = op.format || ''; - var imageUrl = 'imageView2/' + mode; - imageUrl += w ? '/w/' + w : ''; - imageUrl += h ? '/h/' + h : ''; - imageUrl += q ? '/q/' + q : ''; - imageUrl += format ? '/format/' + format : ''; - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + if (!w && !h) { + return false; + } - /** - * invoke the imageMogr2 api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.imageMogr2 = function(op, key) { - var auto_orient = op['auto-orient'] || '', - thumbnail = op.thumbnail || '', - strip = op.strip || '', - gravity = op.gravity || '', - crop = op.crop || '', - quality = op.quality || '', - rotate = op.rotate || '', - format = op.format || '', - blur = op.blur || ''; - //Todo check option - - var imageUrl = 'imageMogr2'; - - imageUrl += auto_orient ? '/auto-orient' : ''; - imageUrl += thumbnail ? '/thumbnail/' + thumbnail : ''; - imageUrl += strip ? '/strip' : ''; - imageUrl += gravity ? '/gravity/' + gravity : ''; - imageUrl += quality ? '/quality/' + quality : ''; - imageUrl += crop ? '/crop/' + crop : ''; - imageUrl += rotate ? '/rotate/' + rotate : ''; - imageUrl += format ? '/format/' + format : ''; - imageUrl += blur ? '/blur/' + blur : ''; - - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + var imageUrl = 'imageView2/' + mode; + imageUrl += w ? '/w/' + w : ''; + imageUrl += h ? '/h/' + h : ''; + imageUrl += q ? '/q/' + q : ''; + imageUrl += format ? '/format/' + format : ''; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - /** - * invoke the watermark api of Qiniu - * @param {Object} api params - * @param {String} key of file - * @return {String} url of processed image - */ - this.watermark = function(op, key) { - var mode = op.mode; - if (!mode) { - return false; - } + /** + * invoke the imageMogr2 api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.imageMogr2 = function (op, key) { + var auto_orient = op['auto-orient'] || '', + thumbnail = op.thumbnail || '', + strip = op.strip || '', + gravity = op.gravity || '', + crop = op.crop || '', + quality = op.quality || '', + rotate = op.rotate || '', + format = op.format || '', + blur = op.blur || ''; + //Todo check option + + var imageUrl = 'imageMogr2'; + + imageUrl += auto_orient ? '/auto-orient' : ''; + imageUrl += thumbnail ? '/thumbnail/' + thumbnail : ''; + imageUrl += strip ? '/strip' : ''; + imageUrl += gravity ? '/gravity/' + gravity : ''; + imageUrl += quality ? '/quality/' + quality : ''; + imageUrl += crop ? '/crop/' + crop : ''; + imageUrl += rotate ? '/rotate/' + rotate : ''; + imageUrl += format ? '/format/' + format : ''; + imageUrl += blur ? '/blur/' + blur : ''; - var imageUrl = 'watermark/' + mode; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - if (mode === 1) { - var image = op.image || ''; - if (!image) { + /** + * invoke the watermark api of Qiniu + * @param {Object} api params + * @param {String} key of file + * @return {String} url of processed image + */ + this.watermark = function (op, key) { + var mode = op.mode; + if (!mode) { return false; } - imageUrl += image ? '/image/' + this.URLSafeBase64Encode(image) : ''; - } else if (mode === 2) { - var text = op.text ? op.text : '', - font = op.font ? op.font : '', - fontsize = op.fontsize ? op.fontsize : '', - fill = op.fill ? op.fill : ''; - if (!text) { + + var imageUrl = 'watermark/' + mode; + + if (mode === 1) { + var image = op.image || ''; + if (!image) { + return false; + } + imageUrl += image ? '/image/' + this.URLSafeBase64Encode(image) : ''; + } else if (mode === 2) { + var text = op.text ? op.text : '', + font = op.font ? op.font : '', + fontsize = op.fontsize ? op.fontsize : '', + fill = op.fill ? op.fill : ''; + if (!text) { + return false; + } + imageUrl += text ? '/text/' + this.URLSafeBase64Encode(text) : ''; + imageUrl += font ? '/font/' + this.URLSafeBase64Encode(font) : ''; + imageUrl += fontsize ? '/fontsize/' + fontsize : ''; + imageUrl += fill ? '/fill/' + this.URLSafeBase64Encode(fill) : ''; + } else { + // Todo mode3 return false; } - imageUrl += text ? '/text/' + this.URLSafeBase64Encode(text) : ''; - imageUrl += font ? '/font/' + this.URLSafeBase64Encode(font) : ''; - imageUrl += fontsize ? '/fontsize/' + fontsize : ''; - imageUrl += fill ? '/fill/' + this.URLSafeBase64Encode(fill) : ''; - } else { - // Todo mode3 - return false; - } - var dissolve = op.dissolve || '', - gravity = op.gravity || '', - dx = op.dx || '', - dy = op.dy || ''; + var dissolve = op.dissolve || '', + gravity = op.gravity || '', + dx = op.dx || '', + dy = op.dy || ''; - imageUrl += dissolve ? '/dissolve/' + dissolve : ''; - imageUrl += gravity ? '/gravity/' + gravity : ''; - imageUrl += dx ? '/dx/' + dx : ''; - imageUrl += dy ? '/dy/' + dy : ''; + imageUrl += dissolve ? '/dissolve/' + dissolve : ''; + imageUrl += gravity ? '/gravity/' + gravity : ''; + imageUrl += dx ? '/dx/' + dx : ''; + imageUrl += dy ? '/dy/' + dy : ''; - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - } - return imageUrl; - }; + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + } + return imageUrl; + }; - /** - * invoke the imageInfo api of Qiniu - * @param {String} key of file - * @return {Object} image info - */ - this.imageInfo = function(key) { - if (!key) { - return false; - } - var url = this.getUrl(key) + '?imageInfo'; - var xhr = this.createAjax(); - var info; - var that = this; - xhr.open('GET', url, false); - xhr.onreadystatechange = function() { - if (xhr.readyState === 4 && xhr.status === 200) { - info = that.parseJSON(xhr.responseText); + /** + * invoke the imageInfo api of Qiniu + * @param {String} key of file + * @return {Object} image info + */ + this.imageInfo = function (key) { + if (!key) { + return false; } + var url = this.getUrl(key) + '?imageInfo'; + var xhr = this.createAjax(); + var info; + var that = this; + xhr.open('GET', url, false); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && xhr.status === 200) { + info = that.parseJSON(xhr.responseText); + } + }; + xhr.send(); + return info; }; - xhr.send(); - return info; - }; - /** - * invoke the exif api of Qiniu - * @param {String} key of file - * @return {Object} image exif - */ - this.exif = function(key) { - if (!key) { - return false; - } - var url = this.getUrl(key) + '?exif'; - var xhr = this.createAjax(); - var info; - var that = this; - xhr.open('GET', url, false); - xhr.onreadystatechange = function() { - if (xhr.readyState === 4 && xhr.status === 200) { - info = that.parseJSON(xhr.responseText); + /** + * invoke the exif api of Qiniu + * @param {String} key of file + * @return {Object} image exif + */ + this.exif = function (key) { + if (!key) { + return false; } + var url = this.getUrl(key) + '?exif'; + var xhr = this.createAjax(); + var info; + var that = this; + xhr.open('GET', url, false); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && xhr.status === 200) { + info = that.parseJSON(xhr.responseText); + } + }; + xhr.send(); + return info; }; - xhr.send(); - return info; - }; - /** - * invoke the exif or imageInfo api of Qiniu - * according with type param - * @param {String} ['exif'|'imageInfo']type of info - * @param {String} key of file - * @return {Object} image exif or info - */ - this.get = function(type, key) { - if (!key || !type) { + /** + * invoke the exif or imageInfo api of Qiniu + * according with type param + * @param {String} ['exif'|'imageInfo']type of info + * @param {String} key of file + * @return {Object} image exif or info + */ + this.get = function (type, key) { + if (!key || !type) { + return false; + } + if (type === 'exif') { + return this.exif(key); + } else if (type === 'imageInfo') { + return this.imageInfo(key); + } return false; - } - if (type === 'exif') { - return this.exif(key); - } else if (type === 'imageInfo') { - return this.imageInfo(key); - } - return false; - }; + }; - /** - * invoke api of Qiniu like a pipeline - * @param {Array of Object} params of a series api call - * each object in array is options of api which name is set as 'fop' property - * each api's output will be next api's input - * @param {String} key of file - * @return {String|Boolean} url of processed image - */ - this.pipeline = function(arr, key) { - var isArray = Object.prototype.toString.call(arr) === '[object Array]'; - var option, errOp, imageUrl = ''; - if (isArray) { - for (var i = 0, len = arr.length; i < len; i++) { - option = arr[i]; - if (!option.fop) { - return false; - } - switch (option.fop) { - case 'watermark': - imageUrl += this.watermark(option) + '|'; - break; - case 'imageView2': - imageUrl += this.imageView2(option) + '|'; - break; - case 'imageMogr2': - imageUrl += this.imageMogr2(option) + '|'; - break; - default: - errOp = true; - break; - } - if (errOp) { - return false; + /** + * invoke api of Qiniu like a pipeline + * @param {Array of Object} params of a series api call + * each object in array is options of api which name is set as 'fop' property + * each api's output will be next api's input + * @param {String} key of file + * @return {String|Boolean} url of processed image + */ + this.pipeline = function (arr, key) { + var isArray = Object.prototype.toString.call(arr) === '[object Array]'; + var option, errOp, imageUrl = ''; + if (isArray) { + for (var i = 0, len = arr.length; i < len; i++) { + option = arr[i]; + if (!option.fop) { + return false; + } + switch (option.fop) { + case 'watermark': + imageUrl += this.watermark(option) + '|'; + break; + case 'imageView2': + imageUrl += this.imageView2(option) + '|'; + break; + case 'imageMogr2': + imageUrl += this.imageMogr2(option) + '|'; + break; + default: + errOp = true; + break; + } + if (errOp) { + return false; + } } - } - if (key) { - imageUrl = this.getUrl(key) + '?' + imageUrl; - var length = imageUrl.length; - if (imageUrl.slice(length - 1) === '|') { - imageUrl = imageUrl.slice(0, length - 1); + if (key) { + imageUrl = this.getUrl(key) + '?' + imageUrl; + var length = imageUrl.length; + if (imageUrl.slice(length - 1) === '|') { + imageUrl = imageUrl.slice(0, length - 1); + } } + return imageUrl; } - return imageUrl; - } - return false; - }; -} + return false; + }; + } -var Qiniu = new QiniuJsSDK(); + var Qiniu = new QiniuJsSDK(); -global.Qiniu = Qiniu; -global.QiniuJsSDK = QiniuJsSDK; + global.Qiniu = Qiniu; + global.QiniuJsSDK = QiniuJsSDK; -})( window ); +})(window); \ No newline at end of file diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 88f7485b..34007439 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ -/*! qiniu-js v1.0.20 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;this.resetUploadUrl=function(){var a="https:"===window.location.protocol?qiniuUpHosts.https:qiniuUpHosts.http;var b=changeUrlTimes%a.length;qiniuUploadUrl=a[b],changeUrlTimes++,logger.debug("resetUploadUrl: "+qiniuUploadUrl)},this.isImage=function(a){return a=a.split(/[?#]/)[0],/\.(png|jpg|jpeg|gif|bmp)$/i.test(a)},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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var i={};var j=a.init&&a.init.Error;var k=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 l="";var m={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var n={url:qiniuUploadUrl,multipart_params:{token:""}};var o=that.detectIEVersion();o&&9>=o&&(n.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(i,a,n),logger.debug("option: ",i);var p=new plupload.Uploader(i);logger.debug("new plupload.Uploader(option)"),p.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),p.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",p.runtime),logger.debug("chunk_size: ",i),"html5"!==p.runtime&&"flash"!==p.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizen-o&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,l=j.ctx,m.isResumeUpload=!0,m.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}m.startTime=(new Date).getTime();var r={};var s=that.detectIEVersion();s&&9>=s&&(r.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:r})}}),logger.debug("bind BeforeUpload event"),p.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),m.currentTime=(new Date).getTime();var c=m.currentTime-m.startTime;var d=b.loaded||0;m.isResumeUpload&&(d=b.loaded-m.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),p.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),l=l?l+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:l,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var q=qiniuUploadUrls.length;var r=function(a){return q-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,p.stop(),p.start()},0),!0):(q=qiniuUploadUrls.length,!1)};return p.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){if(d=c.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!r(e))return;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:if(d="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!r(e))return;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:if(d="\u672a\u77e5\u9519\u8bef\u3002",!r(e))return}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",p.destroy();break;default:if(d=c.message+c.details,!r(e))return}a&&a(b,c,d)}b.refresh()}}(j)),logger.debug("bind Error event"),p.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else p.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var g=that.parseJSON(e.response);if(l=l?l:g.ctx,logger.debug("ctx: ",l),l){var i="";logger.debug("save_key: ",a.save_key),a.save_key||(i=h(c,d,that.key_handler),i=i?"/key/"+that.URLSafeBase64Encode(i):"");var j="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var k=a.x_vars,m="",n="";if(void 0!==k&&"object"==typeof k)for(var o in k)k.hasOwnProperty(o)&&("function"==typeof k[o]?m=that.URLSafeBase64Encode(k[o](c,d)):"object"!=typeof k[o]&&(m=that.URLSafeBase64Encode(k[o])),n+="/x:"+o+"/"+m);var q=qiniuUploadUrl+"/mkfile/"+d.size+i+j+n;var r=that.detectIEVersion();var s;r&&9>=r?(s=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):s=that.createAjax(),s.open("POST",q,!0),s.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),s.setRequestHeader("Authorization","UpToken "+that.token);var t=function(){if(logger.debug("ajax.readyState: ",s.readyState),4===s.readyState){localStorage.removeItem(d.name);var a;200===s.status?(a={status:s.status,response:s.responseText,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),f(c,d,a)):(a={status:s.status,response:s.responseText,file:d,code:-200,responseHeaders:s.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),p.trigger("Error",a))}};r&&9>=r?s.bind("readystatechange",t):s.onreadystatechange=t,s.send(l),logger.debug("mkfile: ",q)}else f(c,d,e)}}(k)),logger.debug("bind FileUploaded event"),p.init(),logger.debug("invoke uploader.init()"),logger.debug("init uploader end"),p},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){if(!/^\d$/.test(a.mode))return!1;var c=a.mode,d=a.w||"",e=a.h||"",f=a.q||"",g=a.format||"";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); +/*! qiniu-js v1.0.21 | Copyright 2015 by Qiniu */ +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-g._start_at.getTime(),g._start_at.getTime(),d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2];statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-d._start_at.getTime(),d._start_at.getTime(),d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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 1de89615..8d176c7f 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","resetUploadUrl","hosts","debug","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","join","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","createAjax","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","push","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","host","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","ajax","xhr","swf_url","flash_swf_url","open","onreadystatechange","readyState","status","res","responseText","up","error","bind","send","getUptoken","file","token","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","match","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","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","setRequestHeader","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","responseHeaders","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","fop","Qiniu"],"mappings":"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"} \ No newline at end of file From 7ba2ad9ddb1eec72ccfd74952f7cd53dd5491bc5 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Wed, 5 Jul 2017 14:04:13 +0800 Subject: [PATCH 30/44] fix regular express error --- dist/qiniu.js | 6 +++--- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- src/qiniu.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 155f4e17..0877bbd0 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-7-3 + * Date: 2017-7-5 */ /*global plupload ,moxie*/ @@ -1352,7 +1352,7 @@ // add send log for upload error if (!op.disable_statistics_report) { - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : []; + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )(\w*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; statisticsLogger.log( @@ -1509,7 +1509,7 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2]; + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2]; statisticsLogger.log( info.status, req_id, diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 34007439..11680652 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.21 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-g._start_at.getTime(),g._start_at.getTime(),d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2];statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-d._start_at.getTime(),d._start_at.getTime(),d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )(\w*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-g._start_at.getTime(),g._start_at.getTime(),d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2];statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-d._start_at.getTime(),d._start_at.getTime(),d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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 8d176c7f..ed22862f 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","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 f6fc333b..32f8c5ce 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1352,7 +1352,7 @@ // add send log for upload error if (!op.disable_statistics_report) { - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/) : []; + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )(\w*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; statisticsLogger.log( @@ -1509,7 +1509,7 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([^,]*)/)[2]; + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2]; statisticsLogger.log( info.status, req_id, From b336ca94071b0ba7d3ebd9b72271fcd715b64154 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Wed, 12 Jul 2017 16:08:11 +0800 Subject: [PATCH 31/44] fix regexp for reqid --- src/qiniu.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 32f8c5ce..018a210b 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1352,7 +1352,7 @@ // add send log for upload error if (!op.disable_statistics_report) { - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )(\w*)/) : []; + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.-]*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; statisticsLogger.log( @@ -1509,7 +1509,7 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2]; + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.-]*)/)[2]; statisticsLogger.log( info.status, req_id, From 55d0acf29cd8b9418e25157f8159a34dc71ba61d Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Wed, 12 Jul 2017 16:39:09 +0800 Subject: [PATCH 32/44] fix time compute --- src/qiniu.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 018a210b..583561a8 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1352,17 +1352,18 @@ // add send log for upload error if (!op.disable_statistics_report) { - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.-]*)/) : []; + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime() statisticsLogger.log( errcode === 0 ? ExtraErrors.NetworkError : errcode, req_id, getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - file._start_at.getTime(), - file._start_at.getTime(), + nowTime.getTime() - startAt, + startAt, err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, file.size @@ -1509,15 +1510,16 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.-]*)/)[2]; + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2]; + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime() statisticsLogger.log( info.status, req_id, getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - file._start_at.getTime(), - file._start_at.getTime(), + nowTime.getTime() - startAt, + startAt, file.size, "jssdk-" + up.runtime, file.size @@ -1544,7 +1546,7 @@ getPortFromUrl(up.settings.url), nowTime.getTime() - files[i]._start_at.getTime(), files[i]._start_at.getTime(), - files[i].size, + files[i].size * files[i].percent / 100, "jssdk-" + up.runtime, files[i].size ); From f0d152ddc7388c6a3a2f2df5d020a1ebf3fe1585 Mon Sep 17 00:00:00 2001 From: "Alex (Jinghao) Yan" Date: Wed, 12 Jul 2017 19:02:18 +0800 Subject: [PATCH 33/44] add new dist --- dist/qiniu.js | 18 ++++++++++-------- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- src/qiniu.js | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 0877bbd0..14b58171 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-7-5 + * Date: 2017-7-12 */ /*global plupload ,moxie*/ @@ -1352,17 +1352,18 @@ // add send log for upload error if (!op.disable_statistics_report) { - var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )(\w*)/) : []; + var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( errcode === 0 ? ExtraErrors.NetworkError : errcode, req_id, getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - file._start_at.getTime(), - file._start_at.getTime(), + nowTime.getTime() - startAt, + startAt, err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, file.size @@ -1509,15 +1510,16 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2]; + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2]; + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( info.status, req_id, getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - file._start_at.getTime(), - file._start_at.getTime(), + nowTime.getTime() - startAt, + startAt, file.size, "jssdk-" + up.runtime, file.size @@ -1544,7 +1546,7 @@ getPortFromUrl(up.settings.url), nowTime.getTime() - files[i]._start_at.getTime(), files[i]._start_at.getTime(), - files[i].size, + files[i].size * files[i].percent / 100, "jssdk-" + up.runtime, files[i].size ); diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 11680652..19370e71 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.21 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )(\w*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-g._start_at.getTime(),g._start_at.getTime(),d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )(\w*)/)[2];statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-d._start_at.getTime(),d._start_at.getTime(),d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;var q=g._start_at?g._start_at.getTime():e.getTime();statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-q,q,d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2];var y=d._start_at?d._start_at.getTime():f.getTime();statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-y,y,d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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 ed22862f..88e01426 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","startAt","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","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 583561a8..c85ea4ed 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1355,7 +1355,7 @@ var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/) : []; var req_id = matchedGroups[2]; var errcode = plupload.HTTP_ERROR ? err.status : err.code; - var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime() + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( errcode === 0 ? ExtraErrors.NetworkError : errcode, req_id, @@ -1511,7 +1511,7 @@ // send statistics log if (!op.disable_statistics_report) { var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2]; - var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime() + var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( info.status, req_id, From e293699cbd3721d65e232eb51c6dd6bbf37bb64e Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 06:33:58 +0800 Subject: [PATCH 34/44] update the js-sdk to use the latest nodejs sdk --- .travis.yml | 4 +- bower.json | 26 ++- demo/scripts/main.js | 461 ++++++++++++++++++++++--------------------- demo/server.js | 136 ++++++------- package.json | 6 +- 5 files changed, 317 insertions(+), 316 deletions(-) diff --git a/.travis.yml b/.travis.yml index f6be0ee3..96410855 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - "0.12" + - '4' cache: directories: - node_modules @@ -9,4 +9,4 @@ install: - npm install - bower install script: - - grunt \ No newline at end of file + - grunt diff --git a/bower.json b/bower.json index 4cdaa5f7..ed4b3f93 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "qiniu", "description": "Javascript SDK for Qiniu Resource (Cloud) Storage API", - "version": "v1.0.20", + "version": "v1.0.21", "main": "dist/qiniu.js", "moduleType": [ "globals" @@ -22,20 +22,16 @@ "upload" ], "authors": "sdk@qiniu.com", - "contributors": [ - { - "name": "luoyeshu0507", - "email": "lizhiwei@qiniu.com" - }, - { - "name": "codedogfish", - "email": "jackyu@qiniu.com" - }, - { - "name": "dengchenhua", - "email": "dengchenhua@qiniu.com" - } - ], + "contributors": [{ + "name": "luoyeshu0507", + "email": "lizhiwei@qiniu.com" + }, { + "name": "codedogfish", + "email": "jackyu@qiniu.com" + }, { + "name": "jinxinxin", + "email": "jinxinxin@qiniu.com" + }], "homepage": "https://github.com/qiniu/js-sdk", "repository": { "type": "git", diff --git a/demo/scripts/main.js b/demo/scripts/main.js index af814814..2722d81f 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -4,249 +4,254 @@ /*global hljs */ $(function() { - var uploader = Qiniu.uploader({ - disable_statistics_report: false, - runtimes: 'html5,flash,html4', - browse_button: 'pickfiles', - container: 'container', - drop_element: 'container', - max_file_size: '1000mb', - flash_swf_url: 'bower_components/plupload/js/Moxie.swf', - dragdrop: true, - chunk_size: '4mb', - multi_selection: !(moxie.core.utils.Env.OS.toLowerCase()==="ios"), - uptoken_url: $('#uptoken_url').val(), - // uptoken_func: function(){ - // var ajax = new XMLHttpRequest(); - // ajax.open('GET', $('#uptoken_url').val(), false); - // ajax.setRequestHeader("If-Modified-Since", "0"); - // ajax.send(); - // if (ajax.status === 200) { - // var res = JSON.parse(ajax.responseText); - // console.log('custom uptoken_func:' + res.uptoken); - // return res.uptoken; - // } else { - // console.log('custom uptoken_func err'); - // return ''; - // } - // }, - domain: $('#domain').val(), - get_new_uptoken: false, - // downtoken_url: '/downtoken', - // unique_names: true, - // save_key: true, - // x_vars: { - // 'id': '1234', - // 'time': function(up, file) { - // var time = (new Date()).getTime(); - // // do something with 'time' - // return time; - // }, - // }, - auto_start: true, - log_level: 5, - init: { - 'BeforeChunkUpload':function (up,file) { - console.log("before chunk upload:",file.name); - }, - 'FilesAdded': function(up, files) { - $('table').show(); - $('#success').hide(); - plupload.each(files, function(file) { - var progress = new FileProgress(file, 'fsUploadProgress'); - progress.setStatus("等待..."); - progress.bindUploadCancel(up); - }); - }, - 'BeforeUpload': function(up, file) { - console.log("this is a beforeupload function from init"); - var progress = new FileProgress(file, 'fsUploadProgress'); - var chunk_size = plupload.parseSize(this.getOption('chunk_size')); - if (up.runtime === 'html5' && chunk_size) { - progress.setChunkProgess(chunk_size); - } - }, - 'UploadProgress': function(up, file) { - var progress = new FileProgress(file, 'fsUploadProgress'); - var chunk_size = plupload.parseSize(this.getOption('chunk_size')); - progress.setProgress(file.percent + "%", file.speed, chunk_size); - }, - 'UploadComplete': function() { - $('#success').show(); - }, - 'FileUploaded': function(up, file, info) { - var progress = new FileProgress(file, 'fsUploadProgress'); - progress.setComplete(up, info); - }, - 'Error': function(up, err, errTip) { - $('table').show(); - var progress = new FileProgress(err.file, 'fsUploadProgress'); - progress.setError(); - progress.setStatus(errTip); - } - // , - // 'Key': function(up, file) { - // var key = ""; - // // do something with key - // return key - // } + var uploader = Qiniu.uploader({ + disable_statistics_report: false, + runtimes: 'html5,flash,html4', + browse_button: 'pickfiles', + container: 'container', + drop_element: 'container', + max_file_size: '1000mb', + flash_swf_url: 'bower_components/plupload/js/Moxie.swf', + dragdrop: true, + chunk_size: '4mb', + multi_selection: !(moxie.core.utils.Env.OS.toLowerCase() === "ios"), + uptoken_url: $('#uptoken_url').val(), + // uptoken_func: function(){ + // var ajax = new XMLHttpRequest(); + // ajax.open('GET', $('#uptoken_url').val(), false); + // ajax.setRequestHeader("If-Modified-Since", "0"); + // ajax.send(); + // if (ajax.status === 200) { + // var res = JSON.parse(ajax.responseText); + // console.log('custom uptoken_func:' + res.uptoken); + // return res.uptoken; + // } else { + // console.log('custom uptoken_func err'); + // return ''; + // } + // }, + domain: $('#domain').val(), + get_new_uptoken: false, + downtoken_url: '/downtoken', + // unique_names: true, + // save_key: true, + // x_vars: { + // 'id': '1234', + // 'time': function(up, file) { + // var time = (new Date()).getTime(); + // // do something with 'time' + // return time; + // }, + // }, + auto_start: true, + log_level: 5, + init: { + 'BeforeChunkUpload': function(up, file) { + console.log("before chunk upload:", file.name); + }, + 'FilesAdded': function(up, files) { + $('table').show(); + $('#success').hide(); + plupload.each(files, function(file) { + var progress = new FileProgress(file, + 'fsUploadProgress'); + progress.setStatus("等待..."); + progress.bindUploadCancel(up); + }); + }, + 'BeforeUpload': function(up, file) { + console.log("this is a beforeupload function from init"); + var progress = new FileProgress(file, 'fsUploadProgress'); + var chunk_size = plupload.parseSize(this.getOption( + 'chunk_size')); + if (up.runtime === 'html5' && chunk_size) { + progress.setChunkProgess(chunk_size); } - }); - //uploader.init(); - uploader.bind('BeforeUpload', function () { - console.log("hello man, i am going to upload a file"); - }); - uploader.bind('FileUploaded', function () { - console.log('hello man,a file is uploaded'); - }); - $('#container').on( - 'dragenter', - function(e) { - e.preventDefault(); - $('#container').addClass('draging'); - e.stopPropagation(); + }, + 'UploadProgress': function(up, file) { + var progress = new FileProgress(file, 'fsUploadProgress'); + var chunk_size = plupload.parseSize(this.getOption( + 'chunk_size')); + progress.setProgress(file.percent + "%", file.speed, + chunk_size); + }, + 'UploadComplete': function() { + $('#success').show(); + }, + 'FileUploaded': function(up, file, info) { + var progress = new FileProgress(file, 'fsUploadProgress'); + progress.setComplete(up, info); + }, + 'Error': function(up, err, errTip) { + $('table').show(); + var progress = new FileProgress(err.file, 'fsUploadProgress'); + progress.setError(); + progress.setStatus(errTip); } - ).on('drop', function(e) { - e.preventDefault(); - $('#container').removeClass('draging'); - e.stopPropagation(); - }).on('dragleave', function(e) { - e.preventDefault(); - $('#container').removeClass('draging'); - e.stopPropagation(); - }).on('dragover', function(e) { - e.preventDefault(); - $('#container').addClass('draging'); - e.stopPropagation(); - }); + // , + // 'Key': function(up, file) { + // var key = ""; + // // do something with key + // return key + // } + } + }); + //uploader.init(); + uploader.bind('BeforeUpload', function() { + console.log("hello man, i am going to upload a file"); + }); + uploader.bind('FileUploaded', function() { + console.log('hello man,a file is uploaded'); + }); + $('#container').on( + 'dragenter', + function(e) { + e.preventDefault(); + $('#container').addClass('draging'); + e.stopPropagation(); + } + ).on('drop', function(e) { + e.preventDefault(); + $('#container').removeClass('draging'); + e.stopPropagation(); + }).on('dragleave', function(e) { + e.preventDefault(); + $('#container').removeClass('draging'); + e.stopPropagation(); + }).on('dragover', function(e) { + e.preventDefault(); + $('#container').addClass('draging'); + e.stopPropagation(); + }); - $('#show_code').on('click', function() { - $('#myModal-code').modal(); - $('pre code').each(function(i, e) { - hljs.highlightBlock(e); - }); + $('#show_code').on('click', function() { + $('#myModal-code').modal(); + $('pre code').each(function(i, e) { + hljs.highlightBlock(e); }); + }); - $('body').on('click', 'table button.btn', function() { - $(this).parents('tr').next().toggle(); - }); + $('body').on('click', 'table button.btn', function() { + $(this).parents('tr').next().toggle(); + }); - var getRotate = function(url) { - if (!url) { - return 0; - } - var arr = url.split('/'); - for (var i = 0, len = arr.length; i < len; i++) { - if (arr[i] === 'rotate') { - return parseInt(arr[i + 1], 10); - } + var getRotate = function(url) { + if (!url) { + return 0; + } + var arr = url.split('/'); + for (var i = 0, len = arr.length; i < len; i++) { + if (arr[i] === 'rotate') { + return parseInt(arr[i + 1], 10); + } + } + return 0; + }; + + $('#myModal-img .modal-body-footer').find('a').on('click', function() { + var img = $('#myModal-img').find('.modal-body img'); + var key = img.data('key'); + var oldUrl = img.attr('src'); + var originHeight = parseInt(img.data('h'), 10); + var fopArr = []; + var rotate = getRotate(oldUrl); + if (!$(this).hasClass('no-disable-click')) { + $(this).addClass('disabled').siblings().removeClass('disabled'); + if ($(this).data('imagemogr') !== 'no-rotate') { + fopArr.push({ + 'fop': 'imageMogr2', + 'auto-orient': true, + 'strip': true, + 'rotate': rotate, + 'format': 'png' + }); + } + } else { + $(this).siblings().removeClass('disabled'); + var imageMogr = $(this).data('imagemogr'); + if (imageMogr === 'left') { + rotate = rotate - 90 < 0 ? rotate + 270 : rotate - 90; + } else if (imageMogr === 'right') { + rotate = rotate + 90 > 360 ? rotate - 270 : rotate + 90; + } + fopArr.push({ + 'fop': 'imageMogr2', + 'auto-orient': true, + 'strip': true, + 'rotate': rotate, + 'format': 'png' + }); + } + + $('#myModal-img .modal-body-footer').find('a.disabled').each( + function() { + + var watermark = $(this).data('watermark'); + var imageView = $(this).data('imageview'); + var imageMogr = $(this).data('imagemogr'); + + if (watermark) { + fopArr.push({ + fop: 'watermark', + mode: 1, + image: 'http://www.b1.qiniudn.com/images/logo-2.png', + dissolve: 100, + gravity: watermark, + dx: 100, + dy: 100 + }); } - return 0; - }; - $('#myModal-img .modal-body-footer').find('a').on('click', function() { - var img = $('#myModal-img').find('.modal-body img'); - var key = img.data('key'); - var oldUrl = img.attr('src'); - var originHeight = parseInt(img.data('h'), 10); - var fopArr = []; - var rotate = getRotate(oldUrl); - if (!$(this).hasClass('no-disable-click')) { - $(this).addClass('disabled').siblings().removeClass('disabled'); - if ($(this).data('imagemogr') !== 'no-rotate') { - fopArr.push({ - 'fop': 'imageMogr2', - 'auto-orient': true, - 'strip': true, - 'rotate': rotate, - 'format': 'png' - }); - } - } else { - $(this).siblings().removeClass('disabled'); - var imageMogr = $(this).data('imagemogr'); - if (imageMogr === 'left') { - rotate = rotate - 90 < 0 ? rotate + 270 : rotate - 90; - } else if (imageMogr === 'right') { - rotate = rotate + 90 > 360 ? rotate - 270 : rotate + 90; - } - fopArr.push({ - 'fop': 'imageMogr2', - 'auto-orient': true, - 'strip': true, - 'rotate': rotate, - 'format': 'png' - }); + if (imageView) { + var height; + switch (imageView) { + case 'large': + height = originHeight; + break; + case 'middle': + height = originHeight * 0.5; + break; + case 'small': + height = originHeight * 0.1; + break; + default: + height = originHeight; + break; + } + fopArr.push({ + fop: 'imageView2', + mode: 3, + h: parseInt(height, 10), + q: 100, + format: 'png' + }); } - $('#myModal-img .modal-body-footer').find('a.disabled').each(function() { - - var watermark = $(this).data('watermark'); - var imageView = $(this).data('imageview'); - var imageMogr = $(this).data('imagemogr'); - - if (watermark) { - fopArr.push({ - fop: 'watermark', - mode: 1, - image: 'http://www.b1.qiniudn.com/images/logo-2.png', - dissolve: 100, - gravity: watermark, - dx: 100, - dy: 100 - }); - } - - if (imageView) { - var height; - switch (imageView) { - case 'large': - height = originHeight; - break; - case 'middle': - height = originHeight * 0.5; - break; - case 'small': - height = originHeight * 0.1; - break; - default: - height = originHeight; - break; - } - fopArr.push({ - fop: 'imageView2', - mode: 3, - h: parseInt(height, 10), - q: 100, - format: 'png' - }); - } - - if (imageMogr === 'no-rotate') { - fopArr.push({ - 'fop': 'imageMogr2', - 'auto-orient': true, - 'strip': true, - 'rotate': 0, - 'format': 'png' - }); - } - }); + if (imageMogr === 'no-rotate') { + fopArr.push({ + 'fop': 'imageMogr2', + 'auto-orient': true, + 'strip': true, + 'rotate': 0, + 'format': 'png' + }); + } + }); - var newUrl = Qiniu.pipeline(fopArr, key); + var newUrl = Qiniu.pipeline(fopArr, key); - var newImg = new Image(); - img.attr('src', 'images/loading.gif'); - newImg.onload = function() { - img.attr('src', newUrl); - img.parent('a').attr('href', newUrl); - }; - newImg.src = newUrl; - return false; - }); + var newImg = new Image(); + img.attr('src', 'images/loading.gif'); + newImg.onload = function() { + img.attr('src', newUrl); + img.parent('a').attr('href', newUrl); + }; + newImg.src = newUrl; + return false; + }); }); diff --git a/demo/server.js b/demo/server.js index 30e37336..b5e9a26b 100644 --- a/demo/server.js +++ b/demo/server.js @@ -4,7 +4,7 @@ var config = require('./config.js'); var app = express(); app.configure(function() { - app.use(express.static(__dirname + '/')); + app.use(express.static(__dirname + '/')); }); app.set('views', __dirname + '/views'); @@ -14,92 +14,92 @@ app.use(express.urlencoded()); app.use('/bower_components', express.static(__dirname + '/../bower_components')); app.use('/src', express.static(__dirname + '/../src')); +var mac = new qiniu.auth.digest.Mac(config.AccessKey, config.SecretKey); +var options = { + scope: config.Bucket, + deleteAfterDays: 7, +}; +var putPolicy = new qiniu.rs.PutPolicy(options); +var bucketManager = new qiniu.rs.BucketManager(mac, null); + 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"); - res.header("Expires", 0); - if (token) { - res.json({ - uptoken: token - }); - } + var token = putPolicy.uploadToken(mac); + res.header("Cache-Control", "max-age=0, private, must-revalidate"); + res.header("Pragma", "no-cache"); + res.header("Expires", 0); + if (token) { + res.json({ + uptoken: token + }); + } }); app.post('/downtoken', function(req, res) { - var key = req.body.key, - domain = req.body.domain; - - //trim 'http://' - if (domain.indexOf('http://') != -1) { - domain = domain.substr(7); - } - //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); - - baseUrl += '?e=' + 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: downloadToken, - url: baseUrl + '&token=' + downloadToken - }) - } + var key = req.body.key; + var domain = req.body.domain; + + //trim '/' if the domain's last char is '/' + if (domain.lastIndexOf('/') === domain.length - 1) { + domain = domain.substr(0, domain.length - 1); + } + + var deadline = 3600 + Math.floor(Date.now() / 1000); + var privateDownUrl = bucketManager.privateDownloadUrl(domain, key, + deadline); + res.json({ + url: privateDownUrl, + }); + }); app.get('/', function(req, res) { - res.render('index.html', { - domain: config.Domain, - uptoken_url: config.Uptoken_Url - }); + res.render('index.html', { + domain: config.Domain, + uptoken_url: config.UptokenUrl + }); }); app.get('/multiple', function(req, res) { - res.render('multiple.html', { - domain: config.Domain, - uptoken_url: config.Uptoken_Url - }); + res.render('multiple.html', { + domain: config.Domain, + uptoken_url: config.UptokenUrl + }); }); app.get('/formdata', function(req, res) { - var token = uptoken.token(); - res.render('formdata.html', { - domain: config.Domain, - uptoken: token - }); + var token = putPolicy.uploadToken(mac); + res.render('formdata.html', { + domain: config.Domain, + uptoken: token + }); }); app.get('/performance', function(req, res) { - var token = uptoken.token(); - res.render('performance.html', { - uptoken: token - }); + var token = putPolicy.uploadToken(mac); + res.render('performance.html', { + uptoken: token + }); }); -qiniu.conf.ACCESS_KEY = config.ACCESS_KEY; -qiniu.conf.SECRET_KEY = config.SECRET_KEY; - -var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name); app.listen(config.Port, function() { - console.log('Listening on port %d\n', config.Port); - console.log('▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ Demos ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽') - console.log(' ▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹ Upload: http://127.0.0.1:%d ◁ ◁ ◁ ◁ ◁ ◁ ◁', config.Port); - console.log(' ▹▹▹▹▹▹▹ Multiple upload: http://127.0.0.1:%d/multiple ◁ ◁ ◁', config.Port); - console.log(' ▹▹▹▹▹▹▹ Formdata upload: http://127.0.0.1:%d/formdata ◁ ◁ ◁', config.Port); - console.log(' ▹▹▹▹▹▹▹ Up Performance: http://127.0.0.1:%d/performance ◁ ◁', config.Port); - console.log('△ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △\n'); + console.log('Listening on port %d\n', config.Port); + console.log( + '▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ Demos ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽ ▽'); + console.log( + ' ▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹▹ Upload: http://127.0.0.1:%d ◁ ◁ ◁ ◁ ◁ ◁ ◁', + config.Port); + console.log( + ' ▹▹▹▹▹▹▹ Multiple upload: http://127.0.0.1:%d/multiple ◁ ◁ ◁', + config.Port); + console.log( + ' ▹▹▹▹▹▹▹ Formdata upload: http://127.0.0.1:%d/formdata ◁ ◁ ◁', + config.Port); + console.log( + ' ▹▹▹▹▹▹▹ Up Performance: http://127.0.0.1:%d/performance ◁ ◁', + config.Port); + console.log( + '△ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △ △\n' + ); }); diff --git a/package.json b/package.json index ef7b8686..dd398d5e 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "email": "jackyu@qiniu.com" }, { - "name": "dengchenhua", - "email": "dengchenhua@qiniu.com" + "name": "jinxinxin", + "email": "jinxinxin@qiniu.com" } ], "devDependencies": { @@ -48,7 +48,7 @@ "grunt-contrib-jshint": "~0.7.2", "grunt-contrib-uglify": "~0.2.2", "grunt-contrib-watch": "~0.5.3", - "qiniu": "~6.1.1" + "qiniu": "~7.0.5" }, "license": "MIT" } From 93221a2b0dba1fe9d567f1f5a8c373227eaac34a Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 06:36:15 +0800 Subject: [PATCH 35/44] fix response parse error --- demo/scripts/ui.js | 851 +++++++++++++++++++++++---------------------- 1 file changed, 437 insertions(+), 414 deletions(-) diff --git a/demo/scripts/ui.js b/demo/scripts/ui.js index ad07f39c..127cbee3 100644 --- a/demo/scripts/ui.js +++ b/demo/scripts/ui.js @@ -1,414 +1,437 @@ -/*global plupload */ -/*global qiniu */ -function FileProgress(file, targetID) { - this.fileProgressID = file.id; - this.file = file; - - this.opacity = 100; - this.height = 0; - this.fileProgressWrapper = $('#' + this.fileProgressID); - if (!this.fileProgressWrapper.length) { - //
- //
- // 20% Complete - //
- //
- - this.fileProgressWrapper = $(''); - var Wrappeer = this.fileProgressWrapper; - Wrappeer.attr('id', this.fileProgressID).addClass('progressContainer'); - - var progressText = $(""); - progressText.addClass('progressName').text(file.name); - - - var fileSize = plupload.formatSize(file.size).toUpperCase(); - var progressSize = $(""); - progressSize.addClass("progressFileSize").text(fileSize); - - var progressBarTd = $(""); - var progressBarBox = $("
"); - progressBarBox.addClass('info'); - var progressBarWrapper = $("
"); - progressBarWrapper.addClass("progress progress-striped"); - - var progressBar = $("
"); - progressBar.addClass("progress-bar progress-bar-info") - .attr('role', 'progressbar') - .attr('aria-valuemax', 100) - .attr('aria-valuenow', 0) - .attr('aria-valuein', 0) - .width('0%'); - - var progressBarPercent = $(''); - progressBarPercent.text(fileSize); - - var progressCancel = $(''); - progressCancel.show().addClass('progressCancel').text('×'); - - progressBar.append(progressBarPercent); - progressBarWrapper.append(progressBar); - progressBarBox.append(progressBarWrapper); - progressBarBox.append(progressCancel); - - var progressBarStatus = $('
'); - progressBarBox.append(progressBarStatus); - progressBarTd.append(progressBarBox); - - Wrappeer.append(progressText); - Wrappeer.append(progressSize); - Wrappeer.append(progressBarTd); - - $('#' + targetID).append(Wrappeer); - } else { - this.reset(); - } - - this.height = this.fileProgressWrapper.offset().top; - this.setTimer(null); -} - -FileProgress.prototype.setTimer = function(timer) { - this.fileProgressWrapper.FP_TIMER = timer; -}; - -FileProgress.prototype.getTimer = function(timer) { - return this.fileProgressWrapper.FP_TIMER || null; -}; - -FileProgress.prototype.reset = function() { - this.fileProgressWrapper.attr('class', "progressContainer"); - this.fileProgressWrapper.find('td .progress .progress-bar-info').attr('aria-valuenow', 0).width('0%').find('span').text(''); - this.appear(); -}; - -FileProgress.prototype.setChunkProgess = function(chunk_size) { - var chunk_amount = Math.ceil(this.file.size / chunk_size); - if (chunk_amount === 1) { - return false; - } - - var viewProgess = $(''); - - var progressBarChunkTr = $(''); - var progressBarChunk = $('
'); - for (var i = 1; i <= chunk_amount; i++) { - var col = $('
'); - var progressBarWrapper = $('
"); - progressBar.addClass("progress-bar progress-bar-info text-left") - .attr('role', 'progressbar') - .attr('aria-valuemax', 100) - .attr('aria-valuenow', 0) - .attr('aria-valuein', 0) - .width('0%') - .attr('id', this.file.id + '_' + i) - .text(''); - - var progressBarStatus = $(''); - progressBarStatus.addClass('chunk-status').text(); - - progressBarWrapper.append(progressBar); - progressBarWrapper.append(progressBarStatus); - - col.append(progressBarWrapper); - progressBarChunk.append(col); - } - - if(!this.fileProgressWrapper.find('td:eq(2) .btn-default').length){ - this.fileProgressWrapper.find('td>div').append(viewProgess); - } - progressBarChunkTr.hide().find('td').append(progressBarChunk); - progressBarChunkTr.insertAfter(this.fileProgressWrapper); - -}; - -FileProgress.prototype.setProgress = function(percentage, speed, chunk_size) { - this.fileProgressWrapper.attr('class', "progressContainer green"); - - var file = this.file; - var uploaded = file.loaded; - - var size = plupload.formatSize(uploaded).toUpperCase(); - var formatSpeed = plupload.formatSize(speed).toUpperCase(); - var progressbar = this.fileProgressWrapper.find('td .progress').find('.progress-bar-info'); - if (this.fileProgressWrapper.find('.status').text() === '取消上传'){ - return; - } - this.fileProgressWrapper.find('.status').text("已上传: " + size + " 上传速度: " + formatSpeed + "/s"); - percentage = parseInt(percentage, 10); - if (file.status !== plupload.DONE && percentage === 100) { - percentage = 99; - } - - progressbar.attr('aria-valuenow', percentage).css('width', percentage + '%'); - - if (chunk_size) { - var chunk_amount = Math.ceil(file.size / chunk_size); - if (chunk_amount === 1) { - return false; - } - var current_uploading_chunk = Math.ceil(uploaded / chunk_size); - var pre_chunk, text; - - for (var index = 0; index < current_uploading_chunk; index++) { - pre_chunk = $('#' + file.id + "_" + index); - pre_chunk.width('100%').removeClass().addClass('alert-success').attr('aria-valuenow', 100); - text = "块" + index + "上传进度100%"; - pre_chunk.next().html(text); - } - - var currentProgessBar = $('#' + file.id + "_" + current_uploading_chunk); - var current_chunk_percent; - if (current_uploading_chunk < chunk_amount) { - if (uploaded % chunk_size) { - current_chunk_percent = ((uploaded % chunk_size) / chunk_size * 100).toFixed(2); - } else { - current_chunk_percent = 100; - currentProgessBar.removeClass().addClass('alert-success'); - } - } else { - var last_chunk_size = file.size - chunk_size * (chunk_amount - 1); - var left_file_size = file.size - uploaded; - if (left_file_size % last_chunk_size) { - current_chunk_percent = ((uploaded % chunk_size) / last_chunk_size * 100).toFixed(2); - } else { - current_chunk_percent = 100; - currentProgessBar.removeClass().addClass('alert-success'); - } - } - currentProgessBar.width(current_chunk_percent + '%'); - currentProgessBar.attr('aria-valuenow', current_chunk_percent); - text = "块" + current_uploading_chunk + "上传进度" + current_chunk_percent + '%'; - currentProgessBar.next().html(text); - } - - this.appear(); -}; - -FileProgress.prototype.setComplete = function(up, info) { - var td = this.fileProgressWrapper.find('td:eq(2)'), - tdProgress = td.find('.progress'); - - var res = $.parseJSON(info.response); - 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 + "
"; - } - - tdProgress.html(str).removeClass().next().next('.status').hide(); - td.find('.progressCancel').hide(); - - var progressNameTd = this.fileProgressWrapper.find('.progressName'); - var imageView = '?imageView2/1/w/100/h/100'; - - var isImage = function(url) { - var res, suffix = ""; - var imageSuffixes = ["png", "jpg", "jpeg", "gif", "bmp"]; - var suffixMatch = /\.([a-zA-Z0-9]+)(\?|\@|$)/; - - if (!url || !suffixMatch.test(url)) { - return false; - } - res = suffixMatch.exec(url); - suffix = res[1].toLowerCase(); - for (var i = 0, l = imageSuffixes.length; i < l; i++) { - if (suffix === imageSuffixes[i]) { - return true; - } - } - return false; - }; - - var isImg = isImage(url); - - var Wrapper = $('
'); - var imgWrapper = $('
'); - var linkWrapper = $(''); - var showImg = $(''); - - progressNameTd.append(Wrapper); - - if (!isImg) { - showImg.attr('src', 'images/default.png'); - Wrapper.addClass('default'); - - imgWrapper.append(showImg); - Wrapper.append(imgWrapper); - } else { - linkWrapper.append(showImg); - imgWrapper.append(linkWrapper); - Wrapper.append(imgWrapper); - - var img = new Image(); - if (!/imageView/.test(url)) { - url += imageView - } - $(img).attr('src', url); - - var height_space = 340; - $(img).on('load', function() { - showImg.attr('src', url); - - linkWrapper.attr('href', url).attr('title', '查看原图'); - - function initImg(url, key, height) { - $('#myModal-img').modal(); - var modalBody = $('#myModal-img').find('.modal-body'); - if (height <= 300) { - $('#myModal-img').find('.text-warning').show(); - } - var newImg = new Image(); - 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); - }; - newImg.src = url; - } - - var infoWrapper = $('
'); - - - var fopLink = $('
'); - fopLink.attr('data-key', res.key).text('查看处理效果'); - infoWrapper.append(fopLink); - fopLink.on('click', function() { - var key = $(this).data('key'); - var height = parseInt($(this).parents('.Wrapper').find('.origin-height').text(), 10); - if (height > $(window).height() - height_space) { - height = parseInt($(window).height() - height_space, 10); - } else { - height = parseInt(height, 10) || 300; - //set a default height 300 for ie9- - } - var fopArr = []; - fopArr.push({ - fop: 'imageView2', - mode: 3, - h: height, - q: 100, - format: 'png' - }); - fopArr.push({ - fop: 'watermark', - mode: 1, - image: 'http://www.b1.qiniudn.com/images/logo-2.png', - dissolve: 100, - gravity: 'SouthEast', - dx: 100, - dy: 100 - }); - var url = Qiniu.pipeline(fopArr, key); - $('#myModal-img').on('hide.bs.modal', function() { - $('#myModal-img').find('.btn-default').removeClass('disabled'); - $('#myModal-img').find('.text-warning').hide(); - }).on('show.bs.modal', function() { - $('#myModal-img').find('.imageView').find('a:eq(0)').addClass('disabled'); - $('#myModal-img').find('.watermark').find('a:eq(3)').addClass('disabled'); - $('#myModal-img').find('.text-warning').hide(); - }); - - initImg(url, key, height); - - return false; - }); - - var ie = Qiniu.detectIEVersion(); - if (!(ie && ie <= 9)) { - var exif = Qiniu.exif(res.key); - if (exif) { - var exifLink = $('查看exif'); - exifLink.attr('href', url + '?exif'); - infoWrapper.append(exifLink); - } - - var imageInfo = Qiniu.imageInfo(res.key); - var infoArea = $('
'); - var infoInner = '
格式:' + imageInfo.format + '
' + - '
宽度:' + imageInfo.width + 'px
' + - '
高度:' + imageInfo.height + 'px
'; - infoArea.html(infoInner); - - infoWrapper.append(infoArea); - } - - Wrapper.append(infoWrapper); - - }).on('error', function() { - showImg.attr('src', 'default.png'); - Wrapper.addClass('default'); - }); - } -}; -FileProgress.prototype.setError = function() { - this.fileProgressWrapper.find('td:eq(2)').attr('class', 'text-warning'); - this.fileProgressWrapper.find('td:eq(2) .progress').css('width', 0).hide(); - this.fileProgressWrapper.find('button').hide(); - this.fileProgressWrapper.next('.chunk-status-tr').hide(); -}; - -FileProgress.prototype.setCancelled = function(manual) { - var progressContainer = 'progressContainer'; - if (!manual) { - progressContainer += ' red'; - } - this.fileProgressWrapper.attr('class', progressContainer); - this.fileProgressWrapper.find('td .progress').remove(); - this.fileProgressWrapper.find('td:eq(2) .btn-default').hide(); - this.fileProgressWrapper.find('td:eq(2) .progressCancel').hide(); -}; - -FileProgress.prototype.setStatus = function(status, isUploading) { - if (!isUploading) { - this.fileProgressWrapper.find('.status').text(status).attr('class', 'status text-left'); - } -}; - -// 绑定取消上传事件 -FileProgress.prototype.bindUploadCancel = function(up) { - var self = this; - if (up) { - self.fileProgressWrapper.find('td:eq(2) .progressCancel').on('click', function(){ - self.setCancelled(false); - self.setStatus("取消上传"); - self.fileProgressWrapper.find('.status').css('left', '0'); - up.removeFile(self.file); - }); - } - -}; - -FileProgress.prototype.appear = function() { - if (this.getTimer() !== null) { - clearTimeout(this.getTimer()); - this.setTimer(null); - } - - if (this.fileProgressWrapper[0].filters) { - try { - this.fileProgressWrapper[0].filters.item("DXImageTransform.Microsoft.Alpha").opacity = 100; - } catch (e) { - // If it is not set initially, the browser will throw an error. This will set it if it is not set yet. - this.fileProgressWrapper.css('filter', "progid:DXImageTransform.Microsoft.Alpha(opacity=100)"); - } - } else { - this.fileProgressWrapper.css('opacity', 1); - } - - this.fileProgressWrapper.css('height', ''); - - this.height = this.fileProgressWrapper.offset().top; - this.opacity = 100; - this.fileProgressWrapper.show(); - -}; +/*global plupload */ +/*global qiniu */ +function FileProgress(file, targetID) { + this.fileProgressID = file.id; + this.file = file; + + this.opacity = 100; + this.height = 0; + this.fileProgressWrapper = $('#' + this.fileProgressID); + if (!this.fileProgressWrapper.length) { + //
+ //
+ // 20% Complete + //
+ //
+ + this.fileProgressWrapper = $(''); + var Wrappeer = this.fileProgressWrapper; + Wrappeer.attr('id', this.fileProgressID).addClass('progressContainer'); + + var progressText = $(""); + progressText.addClass('progressName').text(file.name); + + + var fileSize = plupload.formatSize(file.size).toUpperCase(); + var progressSize = $(""); + progressSize.addClass("progressFileSize").text(fileSize); + + var progressBarTd = $(""); + var progressBarBox = $("
"); + progressBarBox.addClass('info'); + var progressBarWrapper = $("
"); + progressBarWrapper.addClass("progress progress-striped"); + + var progressBar = $("
"); + progressBar.addClass("progress-bar progress-bar-info") + .attr('role', 'progressbar') + .attr('aria-valuemax', 100) + .attr('aria-valuenow', 0) + .attr('aria-valuein', 0) + .width('0%'); + + var progressBarPercent = $(''); + progressBarPercent.text(fileSize); + + var progressCancel = $(''); + progressCancel.show().addClass('progressCancel').text('×'); + + progressBar.append(progressBarPercent); + progressBarWrapper.append(progressBar); + progressBarBox.append(progressBarWrapper); + progressBarBox.append(progressCancel); + + var progressBarStatus = $('
'); + progressBarBox.append(progressBarStatus); + progressBarTd.append(progressBarBox); + + Wrappeer.append(progressText); + Wrappeer.append(progressSize); + Wrappeer.append(progressBarTd); + + $('#' + targetID).append(Wrappeer); + } else { + this.reset(); + } + + this.height = this.fileProgressWrapper.offset().top; + this.setTimer(null); +} + +FileProgress.prototype.setTimer = function(timer) { + this.fileProgressWrapper.FP_TIMER = timer; +}; + +FileProgress.prototype.getTimer = function(timer) { + return this.fileProgressWrapper.FP_TIMER || null; +}; + +FileProgress.prototype.reset = function() { + this.fileProgressWrapper.attr('class', "progressContainer"); + this.fileProgressWrapper.find('td .progress .progress-bar-info').attr( + 'aria-valuenow', 0).width('0%').find('span').text(''); + this.appear(); +}; + +FileProgress.prototype.setChunkProgess = function(chunk_size) { + var chunk_amount = Math.ceil(this.file.size / chunk_size); + if (chunk_amount === 1) { + return false; + } + + var viewProgess = $(''); + + var progressBarChunkTr = $( + ''); + var progressBarChunk = $('
'); + for (var i = 1; i <= chunk_amount; i++) { + var col = $('
'); + var progressBarWrapper = $('
"); + progressBar.addClass("progress-bar progress-bar-info text-left") + .attr('role', 'progressbar') + .attr('aria-valuemax', 100) + .attr('aria-valuenow', 0) + .attr('aria-valuein', 0) + .width('0%') + .attr('id', this.file.id + '_' + i) + .text(''); + + var progressBarStatus = $(''); + progressBarStatus.addClass('chunk-status').text(); + + progressBarWrapper.append(progressBar); + progressBarWrapper.append(progressBarStatus); + + col.append(progressBarWrapper); + progressBarChunk.append(col); + } + + if (!this.fileProgressWrapper.find('td:eq(2) .btn-default').length) { + this.fileProgressWrapper.find('td>div').append(viewProgess); + } + progressBarChunkTr.hide().find('td').append(progressBarChunk); + progressBarChunkTr.insertAfter(this.fileProgressWrapper); + +}; + +FileProgress.prototype.setProgress = function(percentage, speed, chunk_size) { + this.fileProgressWrapper.attr('class', "progressContainer green"); + + var file = this.file; + var uploaded = file.loaded; + + var size = plupload.formatSize(uploaded).toUpperCase(); + var formatSpeed = plupload.formatSize(speed).toUpperCase(); + var progressbar = this.fileProgressWrapper.find('td .progress').find( + '.progress-bar-info'); + if (this.fileProgressWrapper.find('.status').text() === '取消上传') { + return; + } + this.fileProgressWrapper.find('.status').text("已上传: " + size + " 上传速度: " + + formatSpeed + "/s"); + percentage = parseInt(percentage, 10); + if (file.status !== plupload.DONE && percentage === 100) { + percentage = 99; + } + + progressbar.attr('aria-valuenow', percentage).css('width', percentage + '%'); + + if (chunk_size) { + var chunk_amount = Math.ceil(file.size / chunk_size); + if (chunk_amount === 1) { + return false; + } + var current_uploading_chunk = Math.ceil(uploaded / chunk_size); + var pre_chunk, text; + + for (var index = 0; index < current_uploading_chunk; index++) { + pre_chunk = $('#' + file.id + "_" + index); + pre_chunk.width('100%').removeClass().addClass('alert-success').attr( + 'aria-valuenow', 100); + text = "块" + index + "上传进度100%"; + pre_chunk.next().html(text); + } + + var currentProgessBar = $('#' + file.id + "_" + current_uploading_chunk); + var current_chunk_percent; + if (current_uploading_chunk < chunk_amount) { + if (uploaded % chunk_size) { + current_chunk_percent = ((uploaded % chunk_size) / chunk_size * 100).toFixed( + 2); + } else { + current_chunk_percent = 100; + currentProgessBar.removeClass().addClass('alert-success'); + } + } else { + var last_chunk_size = file.size - chunk_size * (chunk_amount - 1); + var left_file_size = file.size - uploaded; + if (left_file_size % last_chunk_size) { + current_chunk_percent = ((uploaded % chunk_size) / last_chunk_size * + 100).toFixed(2); + } else { + current_chunk_percent = 100; + currentProgessBar.removeClass().addClass('alert-success'); + } + } + currentProgessBar.width(current_chunk_percent + '%'); + currentProgessBar.attr('aria-valuenow', current_chunk_percent); + text = "块" + current_uploading_chunk + "上传进度" + current_chunk_percent + + '%'; + currentProgessBar.next().html(text); + } + + this.appear(); +}; + +FileProgress.prototype.setComplete = function(up, info) { + var td = this.fileProgressWrapper.find('td:eq(2)'), + tdProgress = td.find('.progress'); + + var res = $.parseJSON(info); + 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 + "
"; + } + + tdProgress.html(str).removeClass().next().next('.status').hide(); + td.find('.progressCancel').hide(); + + var progressNameTd = this.fileProgressWrapper.find('.progressName'); + var imageView = '?imageView2/1/w/100/h/100'; + + var isImage = function(url) { + var res, suffix = ""; + var imageSuffixes = ["png", "jpg", "jpeg", "gif", "bmp"]; + var suffixMatch = /\.([a-zA-Z0-9]+)(\?|\@|$)/; + + if (!url || !suffixMatch.test(url)) { + return false; + } + res = suffixMatch.exec(url); + suffix = res[1].toLowerCase(); + for (var i = 0, l = imageSuffixes.length; i < l; i++) { + if (suffix === imageSuffixes[i]) { + return true; + } + } + return false; + }; + + var isImg = isImage(url); + + var Wrapper = $('
'); + var imgWrapper = $('
'); + var linkWrapper = $(''); + var showImg = $(''); + + progressNameTd.append(Wrapper); + + if (!isImg) { + showImg.attr('src', 'images/default.png'); + Wrapper.addClass('default'); + + imgWrapper.append(showImg); + Wrapper.append(imgWrapper); + } else { + linkWrapper.append(showImg); + imgWrapper.append(linkWrapper); + Wrapper.append(imgWrapper); + + var img = new Image(); + if (!/imageView/.test(url)) { + url += imageView + } + $(img).attr('src', url); + + var height_space = 340; + $(img).on('load', function() { + showImg.attr('src', url); + + linkWrapper.attr('href', url).attr('title', '查看原图'); + + function initImg(url, key, height) { + $('#myModal-img').modal(); + var modalBody = $('#myModal-img').find('.modal-body'); + if (height <= 300) { + $('#myModal-img').find('.text-warning').show(); + } + var newImg = new Image(); + 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); + }; + newImg.src = url; + } + + var infoWrapper = $('
'); + + + var fopLink = $('
'); + fopLink.attr('data-key', res.key).text('查看处理效果'); + infoWrapper.append(fopLink); + fopLink.on('click', function() { + var key = $(this).data('key'); + var height = parseInt($(this).parents('.Wrapper').find( + '.origin-height').text(), 10); + if (height > $(window).height() - height_space) { + height = parseInt($(window).height() - height_space, 10); + } else { + height = parseInt(height, 10) || 300; + //set a default height 300 for ie9- + } + var fopArr = []; + fopArr.push({ + fop: 'imageView2', + mode: 3, + h: height, + q: 100, + format: 'png' + }); + fopArr.push({ + fop: 'watermark', + mode: 1, + image: 'http://www.b1.qiniudn.com/images/logo-2.png', + dissolve: 100, + gravity: 'SouthEast', + dx: 100, + dy: 100 + }); + var url = Qiniu.pipeline(fopArr, key); + $('#myModal-img').on('hide.bs.modal', function() { + $('#myModal-img').find('.btn-default').removeClass( + 'disabled'); + $('#myModal-img').find('.text-warning').hide(); + }).on('show.bs.modal', function() { + $('#myModal-img').find('.imageView').find('a:eq(0)').addClass( + 'disabled'); + $('#myModal-img').find('.watermark').find('a:eq(3)').addClass( + 'disabled'); + $('#myModal-img').find('.text-warning').hide(); + }); + + initImg(url, key, height); + + return false; + }); + + var ie = Qiniu.detectIEVersion(); + if (!(ie && ie <= 9)) { + var exif = Qiniu.exif(res.key); + if (exif) { + var exifLink = $('查看exif'); + exifLink.attr('href', url + '?exif'); + infoWrapper.append(exifLink); + } + + var imageInfo = Qiniu.imageInfo(res.key); + var infoArea = $('
'); + var infoInner = '
格式:' + + imageInfo.format + '
' + + '
宽度:' + imageInfo.width + + 'px
' + + '
高度:' + imageInfo.height + + 'px
'; + infoArea.html(infoInner); + + infoWrapper.append(infoArea); + } + + Wrapper.append(infoWrapper); + + }).on('error', function() { + showImg.attr('src', 'default.png'); + Wrapper.addClass('default'); + }); + } +}; +FileProgress.prototype.setError = function() { + this.fileProgressWrapper.find('td:eq(2)').attr('class', 'text-warning'); + this.fileProgressWrapper.find('td:eq(2) .progress').css('width', 0).hide(); + this.fileProgressWrapper.find('button').hide(); + this.fileProgressWrapper.next('.chunk-status-tr').hide(); +}; + +FileProgress.prototype.setCancelled = function(manual) { + var progressContainer = 'progressContainer'; + if (!manual) { + progressContainer += ' red'; + } + this.fileProgressWrapper.attr('class', progressContainer); + this.fileProgressWrapper.find('td .progress').remove(); + this.fileProgressWrapper.find('td:eq(2) .btn-default').hide(); + this.fileProgressWrapper.find('td:eq(2) .progressCancel').hide(); +}; + +FileProgress.prototype.setStatus = function(status, isUploading) { + if (!isUploading) { + this.fileProgressWrapper.find('.status').text(status).attr('class', + 'status text-left'); + } +}; + +// 绑定取消上传事件 +FileProgress.prototype.bindUploadCancel = function(up) { + var self = this; + if (up) { + self.fileProgressWrapper.find('td:eq(2) .progressCancel').on('click', + function() { + self.setCancelled(false); + self.setStatus("取消上传"); + self.fileProgressWrapper.find('.status').css('left', '0'); + up.removeFile(self.file); + }); + } + +}; + +FileProgress.prototype.appear = function() { + if (this.getTimer() !== null) { + clearTimeout(this.getTimer()); + this.setTimer(null); + } + + if (this.fileProgressWrapper[0].filters) { + try { + this.fileProgressWrapper[0].filters.item( + "DXImageTransform.Microsoft.Alpha").opacity = 100; + } catch (e) { + // If it is not set initially, the browser will throw an error. This will set it if it is not set yet. + this.fileProgressWrapper.css('filter', + "progid:DXImageTransform.Microsoft.Alpha(opacity=100)"); + } + } else { + this.fileProgressWrapper.css('opacity', 1); + } + + this.fileProgressWrapper.css('height', ''); + + this.height = this.fileProgressWrapper.offset().top; + this.opacity = 100; + this.fileProgressWrapper.show(); + +}; From 808d2783aa2fa40f2dfa8dc0afc327604c023856 Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 08:13:57 +0800 Subject: [PATCH 36/44] update example config format --- demo/config.js.example | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/demo/config.js.example b/demo/config.js.example index 64babd73..86112e4f 100644 --- a/demo/config.js.example +++ b/demo/config.js.example @@ -1,8 +1,8 @@ module.exports = { - 'ACCESS_KEY': '', // https://portal.qiniu.com/user/key - 'SECRET_KEY': '', - 'Bucket_Name': '', + 'AccessKey': '', // https://portal.qiniu.com/user/key + 'SecretKey': '', + 'Bucket': '', 'Port': 19110, - 'Uptoken_Url': 'uptoken', + 'UptokenUrl': 'uptoken', 'Domain': '' // bucket domain eg:http://qiniu-plupload.qiniudn.com/ }; From 1873e9351da11b062bb0668eb29376c972a733cd Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 09:06:26 +0800 Subject: [PATCH 37/44] * update readme to use new response parse * fix private download response parse error --- README.md | 12 ++++++------ demo/scripts/main.js | 3 ++- demo/views/index.html | 8 ++++---- src/qiniu.js | 3 ++- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 847aca72..cdd2edeb 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js }, 'FileUploaded': function(up, file, info) { // 每个文件上传成功后,处理相关的事情 - // 其中 info 是文件上传成功后,服务端返回的json,形式如 + // 其中 info.response 是文件上传成功后,服务端返回的json,形式如 // { // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", // "key": "gogopher.jpg" @@ -243,7 +243,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html // var domain = up.getOption('domain'); - // var res = parseJSON(info); + // var res = parseJSON(info.response); // var sourceLink = domain + res.key; 获取上传成功后的文件的Url }, 'Error': function(up, err, errTip) { @@ -467,11 +467,11 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js ```javascript module.exports = { - 'ACCESS_KEY': '', - 'SECRET_KEY': '', - 'Bucket_Name': '', + 'AccessKey': '', + 'SecretKey': '', + 'Bucket': '', 'Port': 19110, - 'Uptoken_Url': '', // demo 启动后会在本地 /uptoken 上提供获取 uptoken 的接口,所以这里可以填 'uptoken' + 'UptokenUrl': '', // demo 启动后会在本地 /uptoken 上提供获取 uptoken 的接口,所以这里可以填 'uptoken' 'Domain': '' // Bucket 的外链默认域名,在 Bucket 的内容管理里查看,如:'http://xxx.bkt.clouddn.com/' } diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 2722d81f..3511c7e5 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -80,7 +80,8 @@ $(function() { }, 'FileUploaded': function(up, file, info) { var progress = new FileProgress(file, 'fsUploadProgress'); - progress.setComplete(up, info); + console.log("response:", info.response); + progress.setComplete(up, info.response); }, 'Error': function(up, err, errTip) { $('table').show(); diff --git a/demo/views/index.html b/demo/views/index.html index 775e48da..f91d64c4 100644 --- a/demo/views/index.html +++ b/demo/views/index.html @@ -136,7 +136,7 @@ }, 'FileUploaded': function(up, file, info) { // 每个文件上传成功后,处理相关的事情 - // 其中 info 是文件上传成功后,服务端返回的json,形式如 + // 其中 info.response 是文件上传成功后,服务端返回的json,形式如 // { // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", // "key": "gogopher.jpg" @@ -144,7 +144,7 @@ // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html // var domain = up.getOption('domain'); - // var res = parseJSON(info); + // var res = parseJSON(info.response); // var sourceLink = domain + res.key; 获取上传成功后的文件的Url }, 'Error': function(up, err, errTip) { @@ -236,7 +236,7 @@ }, 'FileUploaded': function(up, file, info) { // 每个文件上传成功后,处理相关的事情 - // 其中 info 是文件上传成功后,服务端返回的json,形式如 + // 其中 info.response 是文件上传成功后,服务端返回的json,形式如 // { // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", // "key": "gogopher.jpg" @@ -244,7 +244,7 @@ // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html // var domain = up.getOption('domain'); - // var res = parseJSON(info); + // var res = parseJSON(info.response); // var sourceLink = domain + res.key; 获取上传成功后的文件的Url }, 'Error': function(up, err, errTip) { diff --git a/src/qiniu.js b/src/qiniu.js index c85ea4ed..932c7184 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1403,8 +1403,9 @@ } var info_extended = {}; plupload.extend(info_extended, that.parseJSON(info.response), res_downtoken); + info.response = that.stringifyJSON(info_extended); if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); + _FileUploaded_Handler(up, file, info); } } else { uploader.trigger('Error', { From d3ae1bc9e4c3e9b0319a3bccc2747cc40cbec3b2 Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 09:10:12 +0800 Subject: [PATCH 38/44] use public bucket as default for demo use --- demo/scripts/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/scripts/main.js b/demo/scripts/main.js index 3511c7e5..a054e547 100644 --- a/demo/scripts/main.js +++ b/demo/scripts/main.js @@ -32,7 +32,7 @@ $(function() { // }, domain: $('#domain').val(), get_new_uptoken: false, - downtoken_url: '/downtoken', + //downtoken_url: '/downtoken', // unique_names: true, // save_key: true, // x_vars: { From 5d98ad8c16a71c15593bdf47b36cad0c53049983 Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 09:12:33 +0800 Subject: [PATCH 39/44] add build results --- dist/qiniu.js | 5 +++-- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 14b58171..30a6b465 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-7-12 + * Date: 2017-7-26 */ /*global plupload ,moxie*/ @@ -1403,8 +1403,9 @@ } var info_extended = {}; plupload.extend(info_extended, that.parseJSON(info.response), res_downtoken); + info.response = that.stringifyJSON(info_extended); if (_FileUploaded_Handler) { - _FileUploaded_Handler(up, file, that.stringifyJSON(info_extended)); + _FileUploaded_Handler(up, file, info); } } else { uploader.trigger('Error', { diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 19370e71..2a652ea3 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.21 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;var q=g._start_at?g._start_at.getTime():e.getTime();statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-q,q,d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),b&&b(c,d,that.stringifyJSON(h))}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2];var y=d._start_at?d._start_at.getTime():f.getTime();statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-y,y,d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;var q=g._start_at?g._start_at.getTime():e.getTime();statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-q,q,d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),e.response=that.stringifyJSON(h),b&&b(c,d,e)}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2];var y=d._start_at?d._start_at.getTime():f.getTime();statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-y,y,d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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 88e01426..d26b77a0 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","startAt","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","fop","Qiniu"],"mappings":";CAgBC,SAAWA,QAQR,QAASC,cAAaC,EAAKC,EAAOC,GAC9B,GAAIC,GAAO,GAAIC,KACfD,GAAKE,QAAQF,EAAKG,UAAmB,GAANJ,EAAW,GAAK,GAAK,IACpD,IAAIK,GAAU,aAAeJ,EAAKK,aAClCC,UAASC,OAASV,EAAM,IAAMC,EAAQM,EAAU,WAOpD,QAASI,YAAWX,GAChB,GAAIY,GAASZ,EAAM,GACnB,IAAIa,GAAKJ,SAASC,OAAOI,MAAM,IAC/B,KAAK,GAAIC,GAAI,EAAGC,EAAMH,EAAGI,OAAYD,EAAJD,EAASA,IAAK,CAC3C,GAAIG,GAAIL,EAAGE,EACX,OAAuB,MAAhBG,EAAEC,OAAO,GACZD,EAAIA,EAAEE,UAAU,EAAGF,EAAED,OAEzB,IAA0B,IAAtBC,EAAEG,QAAQT,GACV,MAAOM,GAAEE,UAAUR,EAAOK,OAAQC,EAAED,QAG5C,MAAO,MAKNK,OAAOC,eACRD,OAAOC,cACHC,QAAS,SAAUxB,EAAKC,GACpBF,aAAaC,EAAKC,EAAO,KAE7BwB,QAAS,SAAUzB,GACf,MAAOW,YAAWX,IAEtB0B,WAAY,SAAU1B,GAClBD,aAAaC,EAAK,GAAI,MAKlC,SAAS2B,cAEL,GAAIC,MAAOC,IAUXA,MAAKC,gBAAkB,WACnB,GAAIC,GAAI,EACJC,EAAMvB,SAASwB,cAAc,OAC7BC,EAAMF,EAAIG,qBAAqB,IACnC,OACIH,EAAII,UAAY,iBAAmBL,EAAI,wBACvCG,EAAI,GAEJH,GAEJ,OAAOA,GAAI,EAAIA,GAAI,EAGvB,IAAIM,SACAC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,MAAO,EACPC,MAAO,EAGX,SAASC,KAAIC,EAAMC,GACf,GAAIC,GAAS,kBAAoBF,EAAO,GACxC,IAAIG,GAAMD,CACV,KAAK,GAAIlC,GAAI,EAAGA,EAAIiC,EAAK/B,OAAQF,IAEzBmC,GADmB,gBAAZF,GAAKjC,GACL,IAAMiC,EAAKjC,GAEX,IAAMa,KAAKuB,cAAcH,EAAKjC,GAGzCa,MAAKE,kBAILsB,QAAQN,IAAII,IAEZF,EAAKK,QAAQJ,GACbG,QAAQN,IAAIQ,MAAMF,QAASJ,IAE3BvC,SAAS8C,eAAe,sBACxB9C,SAAS8C,eAAe,oBAAoBnB,WAAa,MAAQc,EAAM,QAI/E,QAASM,aAAYC,GACjB,GAAIC,GAAOD,EAAKE,aAChBtB,QAAOqB,GAAQ,WAGX,GAAIpC,OAAO8B,SAAW9B,OAAO8B,QAAQN,KAAOT,OAAOQ,OAASR,OAAOoB,GAAO,CACtE,GAAIT,GAAOY,MAAMC,UAAUC,MAAMC,KAAKC,UACtClB,KAAIY,EAAMV,KAKtB,IAAK,GAAIiB,YAAY5B,QACbA,OAAO6B,eAAeD,WAA2C,gBAAtB5B,QAAO4B,YAA4B5B,OAAO6B,eAAeD,SAASN,gBAC7GH,YAAYS,SAKpB,IAAIE,eAEAA,gBAD6B,WAA7B7C,OAAO8C,SAASC,SACC,qBAEA,yBAQrB,IAAIC,kBACA,0BACA,sBAGJ,IAAIC,eACAC,MACI,0BACA,uBAEJC,OACI,sBAIR,IAAIC,gBAAiB,CAErB,SAASC,oBAEL,GAAIC,GAA2B,6BAK/B,IAAIC,KACJ,IAAIC,IACAC,QAAS,EACTC,WAAY,EACZC,SAAU,EAiBdpD,MAAKiB,IAAM,SAAUW,EAAMyB,EAAQC,EAAMC,EAAWC,EAAMC,EAAUC,EAASC,EAAYC,EAASC,GAC9F,GAAI5C,GAAMc,MAAMC,UAAU8B,KAAK5B,KAAKC,UAAW,IAC/Ca,GAAMe,MACF9C,IAAKA,EACL+C,OAAQf,EAAWC,UAEvB1C,OAAOyD,MAAM,6CAA8ChD,GAG/D,SAASiD,KACL,GAAIC,KACJ,KAAK,GAAIjF,GAAI,EAAGA,EAAI8D,EAAM5D,OAAQF,IAC1B8D,EAAM9D,GAAG8E,SAAWf,EAAWG,UAC/Be,EAAgBJ,KAAKf,EAAM9D,IAE3B8D,EAAM9D,GAAG8E,SAAWf,EAAWC,SAC/BkB,EAAKpB,EAAM9D,GAGnB8D,GAAQmB,EAGZ,QAASC,GAAKC,GACVA,EAAKL,OAASf,EAAWE,UACzB,IAAImB,GAAOvE,KAAKwE,YAChBD,GAAKE,KAAK,OAAQzB,GAA0B,GAC5CuB,EAAKG,iBAAiB,eAAgB,qCACtCH,EAAKG,iBAAiB,gBAAiB,WAAa1E,KAAK2E,OACzDJ,EAAKK,mBAAqB,WACE,IAApBL,EAAKM,aACe,MAAhBN,EAAKN,QACLxD,OAAOyD,MAAM,kDACbI,EAAKL,OAASf,EAAWG,WAEzB5C,OAAOyD,MAAM,4CACbI,EAAKL,OAASf,EAAWC,WAIrCoB,EAAKF,KAAKC,EAAKpD,KAInB4D,YAAYX,EAAM,KAEtB,GAAIY,kBAAmB,GAAIhC,iBAC3B,IAAIiC,cACAC,aAAc,GACdC,aAAc,GACdC,gBAAiB,GACjBC,YAAa,GACbC,UAAW,GACXC,aAAc,GACdC,aAAc,EACdC,SAAU,MACVC,YAAa,MACbC,oBAAqB,MACrBC,sBAAuB,MAU3B1F,MAAK2F,eAAiB,WAClB,GAAIC,GAAqC,WAA7BnG,OAAO8C,SAASC,SAAwBE,aAAaE,MAAQF,aAAaC,IACtF,IAAIzD,GAAI2D,eAAiB+C,EAAMxG,MAC/BkD,gBAAiBsD,EAAM1G,GACvB2D,iBACArC,OAAOyD,MAAM,mBAAqB3B,iBAWtCtC,KAAK6F,QAAU,SAAUC,GAErB,MADAA,GAAMA,EAAI7G,MAAM,QAAQ,GACjB,6BAA+B8G,KAAKD,IAW/C9F,KAAKgG,iBAAmB,SAAUC,GAC9B,GAAIC,GAAUD,EAAShH,MAAM,IAC7B,IAAIkH,EAMJ,OAJIA,GADmB,IAAnBD,EAAQ9G,QAAgC,KAAf8G,EAAQ,IAAgC,IAAnBA,EAAQ9G,OAChD,GAEA8G,EAAQE,MAAMtE,eAU5B9B,KAAKqG,YAAc,SAAUC,GAgBzB,GAAkB,OAAdA,GAA2C,mBAAdA,GAC7B,MAAO,EAGX,IAAIC,GAAUD,EAAY,EAC1B,IAAIE,GAAU,GACVC,EAAOC,EAAKC,EAAU,CAE1BF,GAAQC,EAAM,EACdC,EAAUJ,EAAOnH,MACjB,KAAK,GAAIwH,GAAI,EAAOD,EAAJC,EAAaA,IAAK,CAC9B,GAAIC,GAAKN,EAAOO,WAAWF,EAC3B,IAAIG,GAAM,IAEV,IAAS,IAALF,EACAH,QACG,IAAIG,EAAK,KAAY,KAALA,EACnBE,EAAMC,OAAOC,aACRJ,GAAM,EAAK,IAAW,GAALA,EAAW,SAE9B,IAAS,MAALA,GAAc,EACrBE,EAAMC,OAAOC,aACRJ,GAAM,GAAM,IAAOA,GAAM,EAAK,GAAM,IAAW,GAALA,EAAW,SAEvD,CACH,GAAS,MAALA,GAAc,EACd,KAAM,IAAIK,YAAW,gCAAkCN,EAE3D,IAAIO,GAAKZ,EAAOO,aAAaF,EAC7B,IAAS,MAALO,GAAc,EACd,KAAM,IAAID,YAAW,gCAAkCN,EAAI,GAE/DC,KAAY,KAALA,IAAe,KAAY,KAALM,GAAc,MAC3CJ,EAAMC,OAAOC,aACRJ,GAAM,GAAM,IAAOA,GAAM,GAAM,GAAM,IAAOA,GAAM,EAAK,GAAM,IAAW,GAALA,EAAW,KAG3E,OAARE,IACIL,EAAMD,IACND,GAAWD,EAAOtE,MAAMwE,EAAOC,IAEnCF,GAAWO,EACXN,EAAQC,EAAME,EAAI,GAQ1B,MAJIF,GAAMD,IACND,GAAWD,EAAOtE,MAAMwE,EAAOE,IAG5BH,GAGXxG,KAAKoH,cAAgB,SAAUC,GAkB3B,GAAIC,GAAM,mEACV,IAAIC,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAM5I,EAAI,EACtC6I,EAAK,EACLC,EAAM,GACNC,IAEJ,KAAKZ,EACD,MAAOA,EAGXA,IAAQ,EAER,GACIK,GAAKJ,EAAI9H,QAAQ6H,EAAK/H,OAAOJ,MAC7ByI,EAAKL,EAAI9H,QAAQ6H,EAAK/H,OAAOJ,MAC7B0I,EAAKN,EAAI9H,QAAQ6H,EAAK/H,OAAOJ,MAC7B2I,EAAKP,EAAI9H,QAAQ6H,EAAK/H,OAAOJ,MAE7B4I,EAAOJ,GAAM,GAAKC,GAAM,GAAKC,GAAM,EAAIC,EAEvCN,EAAKO,GAAQ,GAAK,IAClBN,EAAKM,GAAQ,EAAI,IACjBL,EAAY,IAAPK,EAEM,KAAPF,EACAK,EAAQF,KAAQf,OAAOC,aAAaM,GACtB,KAAPM,EACPI,EAAQF,KAAQf,OAAOC,aAAaM,EAAIC,GAExCS,EAAQF,KAAQf,OAAOC,aAAaM,EAAIC,EAAIC,SAE3CvI,EAAImI,EAAKjI,OAIlB,OAFA4I,GAAMC,EAAQnE,KAAK,KAUvB9D,KAAKkI,cAAgB,SAAUb,GAgB3B,GAAIC,GAAM,mEACV,IAAIC,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAM5I,EAAI,EACtC6I,EAAK,EACLhB,EAAM,GACNkB,IAEJ,KAAKZ,EACD,MAAOA,EAGXA,GAAOrH,KAAKqG,YAAYgB,EAAO,GAE/B,GACIE,GAAKF,EAAKP,WAAW5H,KACrBsI,EAAKH,EAAKP,WAAW5H,KACrBuI,EAAKJ,EAAKP,WAAW5H,KAErB4I,EAAOP,GAAM,GAAKC,GAAM,EAAIC,EAE5BC,EAAKI,GAAQ,GAAK,GAClBH,EAAKG,GAAQ,GAAK,GAClBF,EAAKE,GAAQ,EAAI,GACjBD,EAAY,GAAPC,EAGLG,EAAQF,KAAQT,EAAIhI,OAAOoI,GAAMJ,EAAIhI,OAAOqI,GAAML,EAAIhI,OAAOsI,GAAMN,EAAIhI,OAAOuI,SACzE3I,EAAImI,EAAKjI,OAIlB,QAFA2H,EAAMkB,EAAQnE,KAAK,IAEXuD,EAAKjI,OAAS,GAClB,IAAK,GACD2H,EAAMA,EAAI9E,MAAM,EAAG,IAAM,IACzB,MACJ,KAAK,GACD8E,EAAMA,EAAI9E,MAAM,EAAG,IAAM,IAIjC,MAAO8E,IAQX/G,KAAKmI,oBAAsB,SAAUjI,GAEjC,MADAA,GAAIF,KAAKkI,cAAchI,GAChBA,EAAEkI,QAAQ,MAAO,KAAKA,QAAQ,MAAO,MAGhDpI,KAAKqI,oBAAsB,SAAUnI,GAEjC,MADAA,GAAIA,EAAEkI,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAChCpI,KAAKoH,cAAclH,IAQ9BF,KAAKuE,WAAa,SAAU+D,GACxB,GAAIC,KAMJ,OAJIA,GADA9I,OAAO+I,eACG,GAAIA,gBAEJ,GAAIC,eAAc,sBAWpCzI,KAAK0I,UAAY,SAAUrB,MAEvB,GAAI5H,OAAOkJ,MAAQlJ,OAAOkJ,KAAKC,MAC3B,MAAOnJ,QAAOkJ,KAAKC,MAAMvB,KAO7B,IAAIwB,cAAe,0GAInB,IAAIC,MAAO9B,OAAOK,KAoBlB,OAnBAwB,cAAaE,UAAY,EACrBF,aAAa9C,KAAK+C,QAClBA,KAAOA,KAAKV,QAAQS,aAAc,SAAUG,GACxC,MAAO,OAAS,OAASA,EAAElC,WAAW,GAAGmC,SAAS,KAAKhH,MAAM,OAgB9DiH,KAAK,IAAMJ,KAAO,MAQ7B9I,KAAKsB,cAAgB,SAAU6H,GAE3B,GAAI1J,OAAOkJ,MAAQlJ,OAAOkJ,KAAKS,UAC3B,MAAO3J,QAAOkJ,KAAKS,UAAUD,EAEjC,cAAe,IACX,IAAK,SACD,MAAO,IAAMA,EAAIf,QAAQ,WAAY,QAAU,GACnD,KAAK,QACD,MAAO,IAAMe,EAAIE,IAAItJ,KAAKuB,eAAewC,KAAK,KAAO,GACzD,KAAK,SACD,GAAIqF,YAAepH,OAAO,CACtB,GAAIuH,KACJ,IAAIC,GAAMJ,EAAI/J,MACd,KAAK,GAAIF,GAAI,EAAOqK,EAAJrK,EAASA,IACrBoK,EAAOvF,KAAKhE,KAAKuB,cAAc6H,EAAIjK,IAEvC,OAAO,IAAMoK,EAAOxF,KAAK,KAAO,IAC7B,GAAY,OAARqF,EACP,MAAO,MAEP,IAAI5C,KACJ,KAAK,GAAInE,KAAY+G,GACbA,EAAI9G,eAAeD,IACnBmE,EAAOxC,KAAKhE,KAAKuB,cAAcc,GAAY,IAAMrC,KAAKuB,cAAc6H,EAAI/G,IAGhF,OAAO,IAAMmE,EAAOzC,KAAK,KAAO,GAGxC,KAAK,SACD,MAAOqF,EACX,MAAK,EACD,MAAOA,EACX,KAAK,UACD,MAAOA,KASnBnJ,KAAKwJ,KAAO,SAAUV,GAClB,MAAgB,QAATA,EAAgB,GAAKA,EAAKV,QAAQ,aAAc,KAQ3DpI,KAAKyJ,SAAW,SAAUC,GAQtB,GAAIC,GAAmB,WACnB,GAAIC,GAAK7J,KAAKE,iBACd,IAAI4J,GAAYC,EAAgBC,CAEhC,IAAIC,GAAoD,WAAjCC,MAAMC,KAAKC,MAAMC,IAAIC,SAAwBJ,MAAMC,KAAKC,MAAMC,IAAIE,SAAW,GAAiC,YAA5BL,MAAMC,KAAKC,MAAMC,IAAIG,IAAuD,MAAnCN,MAAMC,KAAKC,MAAMC,IAAII,WAAwD,WAAjCP,MAAMC,KAAKC,MAAMC,IAAIC,SAAoD,QAA5BJ,MAAMC,KAAKC,MAAMC,IAAIG,IAAmD,MAAnCN,MAAMC,KAAKC,MAAMC,IAAII,SAIjSZ,IAAW,EAALA,GAAUF,EAAGK,YAAcL,EAAGe,SAASjL,QAAQ,UAAY,EAGjEkK,EAAGK,WAAa,EACTC,EAIPN,EAAGK,WAAa,GAEhBF,EAAa,GACbC,EAAiB,GAAKD,EAEtBE,EAAaW,SAASC,UAAUjB,EAAGK,YAC/BA,EAAaD,IACbJ,EAAGK,WAAaD,IAQ5B,IAAIc,GAAW,SAAUhF,GACrB,GAAIiF,KACJ,IAAIC,GAAc,EAClB,KAAK,GAAI5L,GAAI,EAAGA,EAAI0G,EAAMxG,OAAQF,IAAK,CACnC,GAAIoE,GAAOsC,EAAM1G,EACc,MAA3BoE,EAAK9D,QAAQ,YACbsL,EAAc5L,GAES,IAAvBoE,EAAK9D,QAAQ,MACbqL,EAAO9G,KAAKT,EAAKrE,MAAM,KAAK,IAE5B4L,EAAO9G,KAAKT,GAIpB,GAAoB,KAAhBwH,EAAoB,CAEpB,GAAIC,GAAeF,EAAOC,EAC1BD,GAAOC,GAAeD,EAAO,GAC7BA,EAAO,GAAKE,EAEhB,MAAOF,GAGX,IAAIG,GAAe,SAAUC,GACzB,GAAIC,GAAWD,EAAQhM,MAAM,IAC7B,IAAIkM,GAAKD,EAAS,EAClB,IAAIE,GAAYrL,KAAK2I,UAAU3I,KAAKsI,oBAAoB6C,EAAS,IAQjE,OAPAE,GAAUD,GAAKA,EACXC,EAAUC,MAAM7L,QAAQ,MAAQ,GAChC4L,EAAUE,OAASF,EAAUC,MAAMpM,MAAM,KAAK,GAC9CmM,EAAUjN,IAAMiN,EAAUC,MAAMpM,MAAM,KAAK,IAE3CmM,EAAUE,OAASF,EAAUC,MAE1BD,EAGX,IAAIG,GAAa,SAAUN,GACvB,GAAIG,GAAYJ,EAAaC,EAG7B,IAAIO,GAAc/L,OAAO8C,SAASC,SAAW,4BAA8B4I,EAAUD,GAAK,WAAaC,EAAUE,MACjH9K,QAAOyD,MAAM,cAAemH,GAC5B5K,OAAOyD,MAAM,qBAAsBuH,EACnC,IAAI5B,GAAK7J,KAAKE,iBACd,IAAIqE,EACAsF,IAAY,GAANA,GACNtF,EAAO,GAAI2F,OAAMwB,IAAIjD,eACrByB,MAAMC,KAAKC,MAAMC,IAAIsB,QAAUhC,EAAGiC,eAElCrH,EAAOvE,KAAKwE,aAEhBD,EAAKE,KAAK,MAAOgH,GAAa,EAC9B,IAAI7G,GAAqB,WAErB,GADAnE,OAAOyD,MAAM,oBAAqBK,EAAKM,YACf,IAApBN,EAAKM,WAEL,GADApE,OAAOyD,MAAM,gBAAiBK,EAAKN,QAC/BM,EAAKN,OAAS,IAAK,CACnB,GAAI4H,GAAM7L,KAAK2I,UAAUpE,EAAKuH,aAC9BnJ,cAAaC,KAAOiI,EAASgB,EAAIjJ,KAAKmJ,IACtCpJ,aAAaE,MAAQgI,EAASgB,EAAIhJ,MAAMkJ,IACxCtL,OAAOyD,MAAM,oBAAqBvB,cAClC3C,KAAK4F,qBAELnF,QAAOuL,MAAM,sBAAuBzH,EAAKuH,cAIjDjC,IAAY,GAANA,EACNtF,EAAK0H,KAAK,mBAAoBrH,GAE9BL,EAAKK,mBAAqBA,EAE9BL,EAAKF,OAcT,IAAI6H,GAAa,SAAUC,GACvB,OAAKnM,KAAK2E,OAAUgF,EAAGyC,aAAepM,KAAKqM,UAAUC,YAC1CC,EAAcJ,GAEdnM,KAAK2E,MASpB,IAAI4H,GAAgB,SAAUJ,GAC1B,GAAIxC,EAAGuB,QACHlL,KAAK2E,MAAQgF,EAAGuB,YACb,IAAIvB,EAAGyC,YAAa,CACvB3L,OAAOyD,MAAM,qBAAsBlE,KAAKoM,YAExC,IAAI7H,GAAOvE,KAAKwE,YAUhB,IATAD,EAAKE,KAAK,MAAOzE,KAAKoM,YAAc,MAAQ,GAAI5N,OAAS,GAQzD+F,EAAKF,OACe,MAAhBE,EAAKN,OAAgB,CACrB,GAAI4H,GAAM7L,KAAK2I,UAAUpE,EAAKuH,aAC9B9L,MAAK2E,MAAQkH,EAAIX,OACjB,IAAIC,GAAWnL,KAAK2E,MAAMzF,MAAM,IAChC,IAAImM,GAAYrL,KAAK2I,UAAU3I,KAAKsI,oBAAoB6C,EAAS,IAC5DnL,MAAKwM,WACNxM,KAAKwM,YAET,IAAIC,GAAe,SAAUC,GACzB,MAAOC,MAAKC,KAAKF,EAAKhO,UAAY,KAEtC,IAAImO,GAAaJ,EAAa,GAAIjO,MAAK+F,EAAKuI,kBAAkB,SAC9D,IAAIC,GAAaN,EAAa,GAAIjO,MAClCwB,MAAKqM,WACDW,YAAaD,EAAaF,EAC1BI,SAAU5B,EAAU4B,SACpBX,UAAW,WACP,GAAIY,GAAWjN,KAAKgN,SAAWR,EAAa,GAAIjO,OAAUyB,KAAK+M,WAC/D,OAAkB,KAAXE,IAGfzM,OAAOyD,MAAM,oBAAqBlE,KAAK2E,OACvClE,OAAOyD,MAAM,mBAAoBlE,KAAKqM,eAEtC5L,QAAOuL,MAAM,sBAAuBzH,EAAKuH,kBAEtCnC,GAAGwD,cACV1M,OAAOyD,MAAM,iCACblE,KAAK2E,MAAQgF,EAAGwD,aAAahB,GAC7B1L,OAAOyD,MAAM,oBAAqBlE,KAAK2E,QAEvClE,OAAOuL,MAAM,+EAKjB,OAHIhM,MAAK2E,OACL6G,EAAWxL,KAAK2E,OAEb3E,KAAK2E,MAIhB,IAAIyI,GAAa,SAAUrB,EAAII,EAAMrK,GAUjC,GAAI1D,GAAM,GACNiP,GAAe,CACnB,KAAK1D,EAAG2D,SAGJ,GAFAD,EAAetB,EAAGwB,WAAaxB,EAAGwB,UAAU,gBAC5CF,EAAeA,GAAiBtB,EAAGyB,UAAYzB,EAAGyB,SAASH,aACzC,CACd,GAAIjH,GAAMpG,KAAKiG,iBAAiBkG,EAAKsB,KACrCrP,GAAMgI,EAAM+F,EAAKuB,GAAK,IAAMtH,EAAM+F,EAAKuB,OAEvCtP,GADuB,kBAAT0D,GACRA,EAAKiK,EAAII,GAETA,EAAKsB,IAGnB,OAAOrP,GAGX,IAAIuP,GAAmB,SAAU5H,GAC7B,GAAIA,GAAOA,EAAI6H,MAAO,CAClB,GAAIC,GAAS9H,EAAI6H,MAAM,yBACvB,OAAOC,GAASA,EAAO,GAAK,GAEhC,MAAO,GAGX,IAAIC,GAAiB,SAAU/H,GAC3B,GAAIA,GAAOA,EAAI6H,MAAO,CAClB,GAAIC,GAAS9H,EAAI6H,MAAM,YACvB,KAAKC,EACD,MAAO,EAEX,IAAI1M,GAAO0M,EAAO,EAElB,OADAA,GAAS9H,EAAI6H,MAAM,gCACfC,EACOA,EAAO,GACE,SAAT1M,EACA,KAEA,MAGf,MAAO,GASX,IAJIwI,EAAGoE,YACHtN,OAAOQ,MAAQ0I,EAAGoE,YAGjBpE,EAAGqE,OACJ,KAAM,wCAGV,KAAKrE,EAAGsE,cACJ,KAAM,+CAGV,KAAKtE,EAAGuB,UAAYvB,EAAGyC,cAAgBzC,EAAGwD,aACtC,KAAM,8EAGV1M,QAAOyD,MAAM,uBAEbzD,OAAOyD,MAAM,gBAAiBgG,MAAMC,KAAKC,MAAMC,KAE/C5J,OAAOyD,MAAM,cAAegK,UAAUC,UAEtC,IAAIC,KAGJ,IAAIC,GAAiB1E,EAAG2E,MAAQ3E,EAAG2E,KAAKC,KACxC,IAAIC,GAAwB7E,EAAG2E,MAAQ3E,EAAG2E,KAAKG,YAG/C9E,GAAG2E,KAAKC,MAAQ,aAChB5E,EAAG2E,KAAKG,aAAe,aAEvBzO,KAAKoM,YAAczC,EAAGyC,YACtBpM,KAAK2E,MAAQ,GACb3E,KAAK0O,YAAqC,kBAAhB/E,GAAG2E,KAAKK,IAAqBhF,EAAG2E,KAAKK,IAAM,GACrE1O,KAAK+N,OAASrE,EAAGqE,MAGjB,IAAIY,GAAM,EACV,IAAIC,IACAC,gBAAgB,EAChBC,eAAgB,EAChBC,UAAW,GACXC,YAAa,GAGjBrF,KACAnJ,OAAOyD,MAAM,6BACbzD,OAAOyD,MAAM,kBAAmByF,EAAGK,WAEnC,IAAIkF,IACAnJ,IAAKxD,eACL4M,kBACIxK,MAAO,IAGf,IAAIkF,GAAK7J,KAAKE,iBAGV2J,IAAY,GAANA,IACNqF,EAAeC,iBAAiBC,OAAS,4BACzC3O,OAAOyD,MAAM,8CAIjByG,SAAS0E,OAAOjB,EAAQzE,EAAIuF,GAE5BzO,OAAOyD,MAAM,WAAYkK,EAGzB,IAAI1E,GAAW,GAAIiB,UAAS2E,SAASlB,EAErC3N,QAAOyD,MAAM,iCAGbwF,EAASuC,KAAK,OAAQ,SAAUF,EAAIwD,GAChC9O,OAAOyD,MAAM,wBAKRyF,EAAG6F,iBACJjD,EAAc,QAKtB9L,OAAOyD,MAAM,mBAKbwF,EAASuC,KAAK,aAAc,SAAUF,EAAI0D,GACtChP,OAAOyD,MAAM,6BACb,IAAIwL,GAAa3D,EAAGwB,WAAaxB,EAAGwB,UAAU,aAC9CmC,GAAaA,GAAe3D,EAAGyB,UAAYzB,EAAGyB,SAASkC,WACvDjP,OAAOyD,MAAM,eAAgBwL,GAC7BjP,OAAOyD,MAAM,UAAWuL,EAGxB,IAAIE,GAAS,WACT,MAA8C,QAA1CzF,MAAMC,KAAKC,MAAMC,IAAIuF,GAAG7N,eACjB,GAEA,EAKf,IAAI4N,IACA,IAAK,GAAIxQ,GAAI,EAAGA,EAAIsQ,EAAMpQ,OAAQF,IAAK,CACnC,GAAIgN,GAAOsD,EAAMtQ,EACjB,IAAIiH,GAAMpG,KAAKiG,iBAAiBkG,EAAKsB,KACrCtB,GAAKsB,KAAOtB,EAAKuB,GAAK,IAAMtH,EAIhCsJ,GACAG,WAAW,WACP9D,EAAGrF,QACHjG,OAAOyD,MAAM,sBACd,GAQP6H,EAAG+D,YAGPrP,OAAOyD,MAAM,yBAObwF,EAASuC,KAAK,eAAgB,SAAUF,EAAII,GACxC1L,OAAOyD,MAAM,gCACbiI,EAAK4D,UAAY,GAAIvR,MAErB2N,EAAK6D,MAAQ7D,EAAK6D,OAAS,EAC3BpB,EAAM,GAEFjF,EAAG6F,iBACHjD,EAAcJ,EAGlB,IAAI8D,GAAe,SAAUlE,EAAII,EAAMrK,GACnC+M,EAAaG,WAAY,GAAIxQ,OAAOE,SACpC,IAAIwR,EAEAA,GADAvG,EAAG2D,UAEC3I,MAAS3E,KAAK2E,QAIdvG,IAAOgP,EAAWrB,EAAII,EAAMrK,GAC5B6C,MAAS3E,KAAK2E,MAGtB,IAAIkF,GAAK7J,KAAKE,iBAGV2J,IAAY,GAANA,IACNqG,EAAqBd,OAAS,4BAC9B3O,OAAOyD,MAAM,8CAGjBzD,OAAOyD,MAAM,sCAAuCgM,EAEpD,IAAIC,GAASxG,EAAGwG,MAChB,IAAeC,SAAXD,GAA0C,gBAAXA,GAC/B,IAAK,GAAIE,KAASF,GACVA,EAAO7N,eAAe+N,KACO,kBAAlBF,GAAOE,GACdH,EAAqB,KAAOG,GAASF,EAAOE,GAAOtE,EAAII,GACvB,gBAAlBgE,GAAOE,KACrBH,EAAqB,KAAOG,GAASF,EAAOE,IAM5DtE,GAAGuE,WACCvK,IAAOxD,eACPgO,WAAa,EACbvG,WAAcwG,IAA4B7G,EAAG8G,cAAgBL,OAC7DjB,iBAAoBe,IAK5B,IAAIM,GAA0B,WAC1B,GAAIE,GAAKxC,UAAUC,UAAUpM,aAC7B,QAAK2O,EAAG9C,MAAM,oBAAuD,cAAjC1D,MAAMC,KAAKC,MAAMC,IAAIC,SAA2BoG,EAAG9C,MAAM,gBAA4D,YAA1C1D,MAAMC,KAAKC,MAAMC,IAAIuF,GAAG7N,eAC5H,GAEA,EAIf,IAAIiI,GAAa+B,EAAGwB,WAAaxB,EAAGwB,UAAU,aAO9C,IANAvD,EAAaA,GAAe+B,EAAGyB,UAAYzB,EAAGyB,SAASxD,WAEvDvJ,OAAOyD,MAAM,qBAAsBwF,EAASiH,SAC5ClQ,OAAOyD,MAAM,eAAgB8F,GAGH,UAArBN,EAASiH,SAA4C,UAArBjH,EAASiH,UAAwB3G,EA8ElEvJ,OAAOyD,MAAM,oGAEb+L,EAAalE,EAAII,EAAMnM,KAAK0O,iBA/E5B,IAAIvC,EAAKyE,KAAO5G,GAAcwG,IAC1B/P,OAAOyD,MAAM,4EAEb+L,EAAalE,EAAII,EAAMnM,KAAK0O,iBACzB,CAIH,GAAImC,GAAgBlR,aAAaE,QAAQsM,EAAKsB,KAC9C,IAAIqD,GAAY9G,CAChB,IAAI6G,EAAe,CAGfA,EAAgB7Q,KAAK2I,UAAUkI,EAC/B,IAAIE,IAAM,GAAKvS,OAAQE,SACvB,IAAIsS,GAASH,EAAcnE,MAAQ,CACnC,IAAIuE,GAAO,KAKQA,GAAfF,EAAMC,GAEwB,MAA1BH,EAAcK,SACV/E,EAAKyE,OAASC,EAAcM,OAG5BhF,EAAK+E,QAAUL,EAAcK,QAC7B/E,EAAKiF,OAASP,EAAcQ,OAC5BzC,EAAMiC,EAAcjC,IAGpBC,EAAaC,gBAAiB,EAC9BD,EAAaE,eAAiB8B,EAAcQ,OAGxCR,EAAcQ,OAASP,EAAY3E,EAAKyE,OACxCE,EAAY3E,EAAKyE,KAAOC,EAAcQ,SAclD1R,aAAaG,WAAWqM,EAAKsB,MAGrCoB,EAAaG,WAAY,GAAIxQ,OAAOE,SACpC,IAAIwR,KACJ,IAAIrG,GAAK7J,KAAKE,iBAGV2J,IAAY,GAANA,IACNqG,EAAqBd,OAAS,4BAC9B3O,OAAOyD,MAAM,8CAIjB6H,EAAGuE,WACCvK,IAAOxD,eAAiB,UAAYuO,EACpCP,WAAa,EACbvG,WAAcA,EACdsH,kBAAqB,SACrBC,SACIC,cAAiB,WAAatF,EAAWC,IAE7CgD,iBAAoBe,OAUpCzP,OAAOyD,MAAM,2BAIbwF,EAASuC,KAAK,iBAAkB,SAAUF,EAAII,GAC1C1L,OAAOgR,MAAM,kCACb5C,EAAaI,aAAc,GAAIzQ,OAAOE,SACtC,IAAIgT,GAAW7C,EAAaI,YAAcJ,EAAaG,SACvD,IAAI2C,GAAexF,EAAKiF,QAAU,CAC9BvC,GAAaC,iBACb6C,EAAexF,EAAKiF,OAASvC,EAAaE,gBAE9C5C,EAAK6D,OAAS2B,EAAeD,EAAW,KAAME,QAAQ,IAAM,IAGhEnR,OAAOyD,MAAM,6BAIbwF,EAASuC,KAAK,gBAAiB,SAAUF,EAAII,EAAM0F,GAC/CpR,OAAOyD,MAAM,iCACbzD,OAAOyD,MAAM,uBAAwBiI,GACrC1L,OAAOyD,MAAM,uBAAwB2N,EACrC,IAAIhG,GAAM7L,KAAK2I,UAAUkJ,EAAKC,SAC9BrR,QAAOyD,MAAM,sBAAuB2H,GAEpC+C,EAAMA,EAAMA,EAAM,IAAM/C,EAAI+C,IAAM/C,EAAI+C,GACtC,IAAImD,GAAWF,EAAKV,MAAQU,EAAKR,MACjC,IAAIrH,GAAa+B,EAAGwB,WAAaxB,EAAGwB,UAAU,aAC9CvD,GAAaA,GAAe+B,EAAGyB,UAAYzB,EAAGyB,SAASxD,WACxCA,EAAX+H,IACAhG,EAAGuE,WACCvK,IAAOxD,eAAiB,UAAYwP,IAExCtR,OAAOyD,MAAM,qBAAsB3B,eAAiB,UAAYwP,IAEpEhG,EAAGuE,WACCiB,SACIC,cAAiB,WAAatF,EAAWC,MAGjDxM,aAAaC,QAAQuM,EAAKsB,KAAMzN,KAAKuB,eACjCqN,IAAKA,EACLsC,QAAS/E,EAAK+E,QACdC,MAAOU,EAAKV,MACZE,OAAQQ,EAAKR,OACb3E,MAAM,GAAKlO,OAAQE,eAI3B+B,OAAOyD,MAAM,2BAEb,IAAI8N,GAAUtP,gBAAgBrD,MAG9B,IAAI4S,GAAqB,SAAU9F,GAC/B,MAAI6F,KAAY,GACZnC,WAAW,WACP7P,KAAK4F,iBACLuG,EAAKlI,OAAS0G,SAASuH,OACvBxI,EAASyI,OACTzI,EAAShD,SACV,IACI,IAEPsL,EAAUtP,gBAAgBrD,QACnB,GA8Tf,OAxTAqK,GAASuC,KAAK,QAAS,SAAWoC,GAC9B,MAAO,UAAUtC,EAAIqG,GACjB3R,OAAOuL,MAAM,yBACbvL,OAAOuL,MAAM,QAASoG,EACtB,IAAIC,GAAU,GAAI7T,KAClB,IAAI8T,GAAS,EACb,IAAInG,GAAOiG,EAAIjG,IACf,IAAIA,EAAM,CACN,OAAQiG,EAAIvQ,MACR,IAAK8I,UAAS4H,OACVD,EAAS,oEACT,MACJ,KAAK3H,UAAS6H,gBACV,GAAI/B,GAAgB1E,EAAGwB,WAAaxB,EAAGwB,UAAU,gBACjDkD,GAAgBA,GAAkB1E,EAAGyB,UAAYzB,EAAGyB,SAASiD,cAC7D6B,EAAS,mDAAa7B,EAAgB,sFACtC,MACJ,KAAK9F,UAAS8H,qBACVH,EAAS,gFACT,MACJ,KAAK3H,UAAS+H,WACV,GAAqB,KAAjBN,EAAIN,SAAiB,CAGrB,GADAQ,EAASF,EAAIO,SAAW,8CACnBV,EAAmB9F,GACpB,MAEJ,OAEJ,GAAIyG,GAAW5S,KAAK2I,UAAUyJ,EAAIN,SAClC,IAAIe,GAAYD,EAAS5G,KACzB,QAAQoG,EAAInO,QACR,IAAK,KACDqO,EAAS,wDACT,MACJ,KAAK,KACDA,EAAS,oHACT,MACJ,KAAK,KACDA,EAAS,wGACT,MACJ,KAAK,KACDA,EAAS,gFACT,MACJ,KAAK,KAED,GADAA,EAAS,oGACJL,EAAmB9F,GACpB,MAEJ,MACJ,KAAK,KACDmG,EAAS,sCACT,KACIM,EAAW5S,KAAK2I,UAAUiK,EAAS5G,OACnC6G,EAAYD,EAAS5G,OAAS,cAChC,MAAO8G,GACLD,EAAYD,EAAS5G,OAAS,cAElC,KACJ,KAAK,KACDsG,EAAS,kDACT,MACJ,KAAK,KACDA,EAAS,oHACT,MACJ,SAEI,GADAA,EAAS,kCACJL,EAAmB9F,GACpB,OAIZmG,EAASA,EAAS,IAAMF,EAAInO,OAAS,SAAM4O,EAAY,GACvD,MACJ,KAAKlI,UAASoI,eACVT,EAAS,kGACT,MACJ,KAAK3H,UAASqI,cACVV,EAAS,oEACT,MACJ,KAAK3H,UAASsI,SACVX,EAAS,oEACT,MACJ,KAAK3H,UAASuI,WACVZ,EAAS,mGACT5I,EAASyJ,SACT,MACJ,SAEI,GADAb,EAASF,EAAIO,QAAUP,EAAIgB,SACtBnB,EAAmB9F,GACpB,OAIRkC,GACAA,EAAetC,EAAIqG,EAAKE,GAMhC,GAHAvG,EAAG+D,WAGEnG,EAAG0J,0BAA2B,CAC/B,GAAIC,GAAiBlB,GAAOA,EAAImB,iBAAmBnB,EAAImB,gBAAgB3F,MAASwE,EAAImB,gBAAgB3F,MAAM,+BAC1G,IAAItK,GAASgQ,EAAc,EAC3B,IAAIE,GAAU7I,SAAS+H,WAAaN,EAAInO,OAASmO,EAAIvQ,IACrD,IAAI4R,GAAUtH,EAAK4D,UAAY5D,EAAK4D,UAAUrR,UAAY2T,EAAQ3T,SAClEqG,kBAAiB7D,IACD,IAAZsS,EAAgBxO,YAAYM,aAAekO,EAC3ClQ,EACAqK,EAAiB5B,EAAGyB,SAASzH,KAC7BqK,OACAtC,EAAe/B,EAAGyB,SAASzH,KAC3BsM,EAAQ3T,UAAY+U,EACpBA,EACArB,EAAIjG,KAAKyE,MAAQwB,EAAIjG,KAAK+E,QAAU,KACpC,SAAWnF,EAAG4E,QACdxE,EAAKyE,SAIlBvC,IAEH5N,OAAOyD,MAAM,oBAMbwF,EAASuC,KAAK,eAAgB,SAAWuC,GACrC,MAAO,UAAUzC,EAAII,EAAM0F,GACvBpR,OAAOyD,MAAM,gCACbzD,OAAOyD,MAAM,sBAAuBiI,GACpC1L,OAAOyD,MAAM,sBAAuB2N,EACpC,IAAIQ,GAAU,GAAI7T,KAClB,IAAIkV,GAAY,SAAU3H,EAAII,EAAM0F,GAEhC,GADApR,OAAOyD,MAAM,0BAA2B2N,GACpClI,EAAGgK,cAAe,CAGlB,GAAIC,GAAiB5T,KAAKwE,YAC1BoP,GAAenP,KAAK,OAAQkF,EAAGgK,eAAe,GAC9CC,EAAelP,iBAAiB,eAAgB,qCAChDkP,EAAehP,mBAAqB,WAChC,GAAkC,IAA9BgP,EAAe/O,WACf,GAA8B,MAA1B+O,EAAe3P,OAAgB,CAC/B,GAAI4P,EACJ,KACIA,EAAgB7T,KAAK2I,UAAUiL,EAAe9H,cAChD,MAAOgH,GACL,KAAM,sBAEV,GAAIgB,KACJnJ,UAAS0E,OAAOyE,EAAe9T,KAAK2I,UAAUkJ,EAAKC,UAAW+B,GAC1DrF,GACAA,EAAsBzC,EAAII,EAAMnM,KAAKuB,cAAcuS,QAGvDpK,GAASqK,QAAQ,SACb9P,OAAQ2P,EAAe3P,OACvB6N,SAAU8B,EAAe9H,aACzBK,KAAMA,EACNtK,KAAM8I,SAAS+H,cAK/BkB,EAAevP,KAAK,OAASrE,KAAK2I,UAAUkJ,EAAKC,UAAU1T,IAAM,WAAauL,EAAGqE,YAC1EQ,IACPA,EAAsBzC,EAAII,EAAM0F,GAIxC,IAAIhG,GAAM7L,KAAK2I,UAAUkJ,EAAKC,SAS9B,IARAlD,EAAMA,EAAMA,EAAM/C,EAAI+C,IAOtBnO,OAAOyD,MAAM,QAAS0K,GAClBA,EAAK,CACL,GAAIxQ,GAAM,EACVqC,QAAOyD,MAAM,aAAcyF,EAAG2D,UACzB3D,EAAG2D,WACJlP,EAAMgP,EAAWrB,EAAII,EAAMnM,KAAK0O,aAChCtQ,EAAMA,EAAM,QAAU4B,KAAKoI,oBAAoBhK,GAAO,GAG1D,IAAI4V,GAAQ,UAAYhU,KAAKoI,oBAAoB+D,EAAKsB,KAEtDhN,QAAOyD,MAAM,cAAeyF,EAAGwG,OAC/B,IAAIA,GAASxG,EAAGwG,OACZ8D,EAAQ,GACRC,EAAa,EACjB,IAAe9D,SAAXD,GAA0C,gBAAXA,GAC/B,IAAK,GAAIE,KAASF,GACVA,EAAO7N,eAAe+N,KACO,kBAAlBF,GAAOE,GACd4D,EAAQjU,KAAKoI,oBAAoB+H,EAAOE,GAAOtE,EAAII,IACnB,gBAAlBgE,GAAOE,KACrB4D,EAAQjU,KAAKoI,oBAAoB+H,EAAOE,KAE5C6D,GAAc,MAAQ7D,EAAQ,IAAM4D,EAKhD,IAAIlO,GAAMxD,eAAiB,WAAa4J,EAAKyE,KAAOxS,EAAM4V,EAAQE,CAElE,IAAIrK,GAAK7J,KAAKE,iBACd,IAAIqE,EACAsF,IAAY,GAANA,GACNtF,EAAO,GAAI2F,OAAMwB,IAAIjD,eACrByB,MAAMC,KAAKC,MAAMC,IAAIsB,QAAUhC,EAAGiC,eAElCrH,EAAOvE,KAAKwE,aAEhBD,EAAKE,KAAK,OAAQsB,GAAK,GACvBxB,EAAKG,iBAAiB,eAAgB,4BACtCH,EAAKG,iBAAiB,gBAAiB,WAAa1E,KAAK2E,MACzD,IAAIC,GAAqB,WAErB,GADAnE,OAAOyD,MAAM,oBAAqBK,EAAKM,YACf,IAApBN,EAAKM,WAAkB,CACvBlF,aAAaG,WAAWqM,EAAKsB,KAC7B,IAAI0G,EACgB,OAAhB5P,EAAKN,QACLkQ,GACIlQ,OAAQM,EAAKN,OACb6N,SAAUvN,EAAKuH,aACfyH,gBAAiBhP,EAAK6P,yBAE1B3T,OAAOyD,MAAM,sBAAuBiQ,GACpCT,EAAU3H,EAAII,EAAMgI,KAEpBA,GACIlQ,OAAQM,EAAKN,OACb6N,SAAUvN,EAAKuH,aACfK,KAAMA,EACNtK,KAAM,KACN0R,gBAAiBhP,EAAK6P,yBAE1B3T,OAAOyD,MAAM,oBAAqBiQ,GAClCzK,EAASqK,QAAQ,QAASI,KAIlCtK,IAAY,GAANA,EACNtF,EAAK0H,KAAK,mBAAoBrH,GAE9BL,EAAKK,mBAAqBA,EAE9BL,EAAKF,KAAKuK,GACVnO,OAAOyD,MAAM,WAAY6B,OAEzB2N,GAAU3H,EAAII,EAAM0F,EAIxB,KAAKlI,EAAG0J,0BAA2B,CAC/B,GAAI/P,GAASuO,EAAK0B,gBAAgB3F,MAAM,6BAA6B,EACrE,IAAI6F,GAAUtH,EAAK4D,UAAY5D,EAAK4D,UAAUrR,UAAY2T,EAAQ3T,SAClEqG,kBAAiB7D,IACb2Q,EAAK5N,OACLX,EACAqK,EAAiB5B,EAAGyB,SAASzH,KAC7BqK,OACAtC,EAAe/B,EAAGyB,SAASzH,KAC3BsM,EAAQ3T,UAAY+U,EACpBA,EACAtH,EAAKyE,KACL,SAAW7E,EAAG4E,QACdxE,EAAKyE,SAIlBpC,IAEH/N,OAAOyD,MAAM,2BAKbwF,EAASuC,KAAK,eAAgB,SAAUF,EAAI0D,GACxC,GAAI4C,GAAU,GAAI7T,KAElB,KAAKmL,EAAG0J,0BACJ,IAAK,GAAIlU,GAAI,EAAGA,EAAIsQ,EAAMpQ,OAAQF,IAC9B4F,iBAAiB7D,IACb8D,YAAYK,UACZ+K,OACAzC,EAAiB5B,EAAGyB,SAASzH,KAC7BqK,OACAtC,EAAe/B,EAAGyB,SAASzH,KAC3BsM,EAAQ3T,UAAY+Q,EAAMtQ,GAAG4Q,UAAUrR,UACvC+Q,EAAMtQ,GAAG4Q,UAAUrR,UACnB+Q,EAAMtQ,GAAGyR,KAAOnB,EAAMtQ,GAAG+R,QAAU,IACnC,SAAWnF,EAAG4E,QACdlB,EAAMtQ,GAAGyR,QAMzBnQ,OAAOyD,MAAM,2BAGbwF,EAAS4E,OACT7N,OAAOyD,MAAM,0BAEbzD,OAAOyD,MAAM,qBAENwF,GAQXzJ,KAAKoU,OAAS,SAAUjW,GACpB,IAAKA,EACD,OAAO,CAEXA,GAAMkW,UAAUlW,EAChB,IAAI4P,GAAS/N,KAAK+N,MAIlB,OAHwC,MAApCA,EAAO9L,MAAM8L,EAAO3O,OAAS,KAC7B2O,GAAkB,KAEfA,EAAS5P,GASpB6B,KAAKsU,WAAa,SAAU5K,EAAIvL,GAE5B,IAAK,OAAO4H,KAAK2D,EAAG6K,MAChB,OAAO,CAGX,IAAIA,GAAO7K,EAAG6K,KACVC,EAAI9K,EAAG8K,GAAK,GACZC,EAAI/K,EAAG+K,GAAK,GACZC,EAAIhL,EAAGgL,GAAK,GACZC,EAASjL,EAAGiL,QAAU,EAE1B,KAAKH,IAAMC,EACP,OAAO,CAGX,IAAIG,GAAW,cAAgBL,CAQ/B,OAPAK,IAAYJ,EAAI,MAAQA,EAAI,GAC5BI,GAAYH,EAAI,MAAQA,EAAI,GAC5BG,GAAYF,EAAI,MAAQA,EAAI,GAC5BE,GAAYD,EAAS,WAAaA,EAAS,GACvCxW,IACAyW,EAAW5U,KAAKoU,OAAOjW,GAAO,IAAMyW,GAEjCA,GASX5U,KAAK6U,WAAa,SAAUnL,EAAIvL,GAC5B,GAAI2W,GAAcpL,EAAG,gBAAkB,GACnCqL,EAAYrL,EAAGqL,WAAa,GAC5BC,EAAQtL,EAAGsL,OAAS,GACpBC,EAAUvL,EAAGuL,SAAW,GACxBC,EAAOxL,EAAGwL,MAAQ,GAClBC,EAAUzL,EAAGyL,SAAW,GACxBC,EAAS1L,EAAG0L,QAAU,GACtBT,EAASjL,EAAGiL,QAAU,GACtBU,EAAO3L,EAAG2L,MAAQ,EAGtB,IAAIT,GAAW,YAef,OAbAA,IAAYE,EAAc,eAAiB,GAC3CF,GAAYG,EAAY,cAAgBA,EAAY,GACpDH,GAAYI,EAAQ,SAAW,GAC/BJ,GAAYK,EAAU,YAAcA,EAAU,GAC9CL,GAAYO,EAAU,YAAcA,EAAU,GAC9CP,GAAYM,EAAO,SAAWA,EAAO,GACrCN,GAAYQ,EAAS,WAAaA,EAAS,GAC3CR,GAAYD,EAAS,WAAaA,EAAS,GAC3CC,GAAYS,EAAO,SAAWA,EAAO,GAEjClX,IACAyW,EAAW5U,KAAKoU,OAAOjW,GAAO,IAAMyW,GAEjCA,GASX5U,KAAKsV,UAAY,SAAU5L,EAAIvL,GAC3B,GAAIoW,GAAO7K,EAAG6K,IACd,KAAKA,EACD,OAAO,CAGX,IAAIK,GAAW,aAAeL,CAE9B,IAAa,IAATA,EAAY,CACZ,GAAIgB,GAAQ7L,EAAG6L,OAAS,EACxB,KAAKA,EACD,OAAO,CAEXX,IAAYW,EAAQ,UAAYvV,KAAKmI,oBAAoBoN,GAAS,OAC/D,CAAA,GAAa,IAAThB,EAcP,OAAO,CAbP,IAAIzL,GAAOY,EAAGZ,KAAOY,EAAGZ,KAAO,GAC3B0M,EAAO9L,EAAG8L,KAAO9L,EAAG8L,KAAO,GAC3BC,EAAW/L,EAAG+L,SAAW/L,EAAG+L,SAAW,GACvCC,EAAOhM,EAAGgM,KAAOhM,EAAGgM,KAAO,EAC/B,KAAK5M,EACD,OAAO,CAEX8L,IAAY9L,EAAO,SAAW9I,KAAKmI,oBAAoBW,GAAQ,GAC/D8L,GAAYY,EAAO,SAAWxV,KAAKmI,oBAAoBqN,GAAQ,GAC/DZ,GAAYa,EAAW,aAAeA,EAAW,GACjDb,GAAYc,EAAO,SAAW1V,KAAKmI,oBAAoBuN,GAAQ,GAMnE,GAAIC,GAAWjM,EAAGiM,UAAY,GAC1BV,EAAUvL,EAAGuL,SAAW,GACxBW,EAAKlM,EAAGkM,IAAM,GACdC,EAAKnM,EAAGmM,IAAM,EAUlB,OARAjB,IAAYe,EAAW,aAAeA,EAAW,GACjDf,GAAYK,EAAU,YAAcA,EAAU,GAC9CL,GAAYgB,EAAK,OAASA,EAAK,GAC/BhB,GAAYiB,EAAK,OAASA,EAAK,GAE3B1X,IACAyW,EAAW5U,KAAKoU,OAAOjW,GAAO,IAAMyW,GAEjCA,GAQX5U,KAAK8V,UAAY,SAAU3X,GACvB,IAAKA,EACD,OAAO,CAEX,IAAI2H,GAAM9F,KAAKoU,OAAOjW,GAAO,YAC7B,IAAIsN,GAAMzL,KAAKuE,YACf,IAAIqN,EACJ,IAAI7R,GAAOC,IAQX,OAPAyL,GAAIjH,KAAK,MAAOsB,GAAK,GACrB2F,EAAI9G,mBAAqB,WACE,IAAnB8G,EAAI7G,YAAmC,MAAf6G,EAAIzH,SAC5B4N,EAAO7R,EAAK2I,UAAU+C,EAAII,gBAGlCJ,EAAIrH,OACGwN,GAQX5R,KAAK+V,KAAO,SAAU5X,GAClB,IAAKA,EACD,OAAO,CAEX,IAAI2H,GAAM9F,KAAKoU,OAAOjW,GAAO,OAC7B,IAAIsN,GAAMzL,KAAKuE,YACf,IAAIqN,EACJ,IAAI7R,GAAOC,IAQX,OAPAyL,GAAIjH,KAAK,MAAOsB,GAAK,GACrB2F,EAAI9G,mBAAqB,WACE,IAAnB8G,EAAI7G,YAAmC,MAAf6G,EAAIzH,SAC5B4N,EAAO7R,EAAK2I,UAAU+C,EAAII,gBAGlCJ,EAAIrH,OACGwN,GAUX5R,KAAKgW,IAAM,SAAU9U,EAAM/C,GACvB,MAAKA,IAAQ+C,EAGA,SAATA,EACOlB,KAAK+V,KAAK5X,GACD,cAAT+C,EACAlB,KAAK8V,UAAU3X,IAEnB,GAPI,GAkBf6B,KAAKiW,SAAW,SAAUC,EAAK/X,GAC3B,GAAIgY,GAAkD,mBAAxCC,OAAOpU,UAAUiH,SAAS/G,KAAKgU,EAC7C,IAAI/H,GAAQkI,EAAOzB,EAAW,EAC9B,IAAIuB,EAAS,CACT,IAAK,GAAIjX,GAAI,EAAGqK,EAAM2M,EAAI9W,OAAYmK,EAAJrK,EAASA,IAAK,CAE5C,GADAiP,EAAS+H,EAAIhX,IACRiP,EAAOmI,IACR,OAAO,CAEX,QAAQnI,EAAOmI,KACX,IAAK,YACD1B,GAAY5U,KAAKsV,UAAUnH,GAAU,GACrC,MACJ,KAAK,aACDyG,GAAY5U,KAAKsU,WAAWnG,GAAU,GACtC,MACJ,KAAK,aACDyG,GAAY5U,KAAK6U,WAAW1G,GAAU,GACtC,MACJ,SACIkI,GAAQ,EAGhB,GAAIA,EACA,OAAO,EAGf,GAAIlY,EAAK,CACLyW,EAAW5U,KAAKoU,OAAOjW,GAAO,IAAMyW,CACpC,IAAIxV,GAASwV,EAASxV,MACa,OAA/BwV,EAAS3S,MAAM7C,EAAS,KACxBwV,EAAWA,EAAS3S,MAAM,EAAG7C,EAAS,IAG9C,MAAOwV,GAEX,OAAO,GAIf,GAAI2B,OAAQ,GAAIzW,WAEhB7B,QAAOsY,MAAQA,MACftY,OAAO6B,WAAaA,YAErBL"} \ No newline at end of file +{"version":3,"file":"dist/qiniu.min.js","sources":["dist/qiniu.js"],"names":["global","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","startAt","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","fop","Qiniu"],"mappings":"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"} \ No newline at end of file From 00bae3579730be1efa8f8115dd2c90d806198467 Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 09:20:54 +0800 Subject: [PATCH 40/44] add performance test link --- demo/views/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/demo/views/index.html b/demo/views/index.html index f91d64c4..9da749c9 100644 --- a/demo/views/index.html +++ b/demo/views/index.html @@ -28,6 +28,7 @@
From f4e6009cbef3f45ec49d08350215ea02e4ec9a51 Mon Sep 17 00:00:00 2001 From: jemygraw Date: Wed, 26 Jul 2017 13:54:55 +0800 Subject: [PATCH 41/44] add travis auto publish scripts --- .travis.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 96410855..9a859c23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,19 @@ language: node_js node_js: - - '4' +- '4' cache: directories: - - node_modules - - bower_components + - node_modules + - bower_components install: - - npm install - - bower install +- npm install +- bower install script: - - grunt +- grunt +deploy: + provider: npm + email: sdk@qiniu.com + api_key: + secure: d06l6wsuv/YFeY3E0TRGemGjtQ7LZdN9WxiFnseT2exTFkDgMw9EV2uOUWllXNrbxXUY+2ZpDswtYrgZ4exQGfKKQRGFy6/g8oxPgyylVwBz98vlie8NvXXmANoyt7mwQwjninf5/XUiY3cwn9YCaU1jyxcayFdQTex05T++qvc= + on: + tags: true From b9f50866c7754a478c8b593598b1550bf24b2c1b Mon Sep 17 00:00:00 2001 From: zhangheng Date: Tue, 1 Aug 2017 15:01:55 +0800 Subject: [PATCH 42/44] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=AD=E6=97=B6=E9=97=B4=E6=88=B3=E7=BB=9F=E4=B8=80=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=A7=92=E4=B8=BA=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/qiniu.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 932c7184..e648e2d0 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1362,8 +1362,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - startAt, - startAt, + (nowTime.getTime() - startAt)/1000, + startAt/1000, err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, file.size @@ -1519,8 +1519,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - startAt, - startAt, + (nowTime.getTime() - startAt)/1000, + startAt/1000, file.size, "jssdk-" + up.runtime, file.size @@ -1545,8 +1545,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - files[i]._start_at.getTime(), - files[i]._start_at.getTime(), + (nowTime.getTime() - files[i]._start_at.getTime())/1000, + files[i]._start_at.getTime()/1000, files[i].size * files[i].percent / 100, "jssdk-" + up.runtime, files[i].size From 5abe37c1804ee46bd0e6a4ef348ca7872a780d26 Mon Sep 17 00:00:00 2001 From: zhangheng Date: Tue, 15 Aug 2017 15:52:55 +0800 Subject: [PATCH 43/44] kodo-3027 --- dist/qiniu.js | 17 ++++++++++------- dist/qiniu.min.js | 2 +- dist/qiniu.min.map | 2 +- src/qiniu.js | 12 +++++++++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/dist/qiniu.js b/dist/qiniu.js index 30a6b465..1269a861 100644 --- a/dist/qiniu.js +++ b/dist/qiniu.js @@ -6,7 +6,7 @@ * * GitHub: http://github.com/qiniu/js-sdk * - * Date: 2017-7-26 + * Date: 2017-8-10 */ /*global plupload ,moxie*/ @@ -1362,8 +1362,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - startAt, - startAt, + (nowTime.getTime() - startAt)/1000, + startAt/1000, err.file.size * (err.file.percent / 100), "jssdk-" + up.runtime, file.size @@ -1471,6 +1471,7 @@ } ajax.open('POST', url, true); ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); + console.log('uptoken:'+that.token); ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); var onreadystatechange = function () { logger.debug("ajax.readyState: ", ajax.readyState); @@ -1511,6 +1512,8 @@ // send statistics log if (!op.disable_statistics_report) { + console.log(123); + console.log(info.responseHeaders); var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2]; var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( @@ -1519,8 +1522,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - startAt, - startAt, + (nowTime.getTime() - startAt)/1000, + startAt/1000, file.size, "jssdk-" + up.runtime, file.size @@ -1545,8 +1548,8 @@ getDomainFromUrl(up.settings.url), undefined, getPortFromUrl(up.settings.url), - nowTime.getTime() - files[i]._start_at.getTime(), - files[i]._start_at.getTime(), + (nowTime.getTime() - files[i]._start_at.getTime())/1000, + files[i]._start_at.getTime()/1000, files[i].size * files[i].percent / 100, "jssdk-" + up.runtime, files[i].size diff --git a/dist/qiniu.min.js b/dist/qiniu.min.js index 2a652ea3..d7098593 100644 --- a/dist/qiniu.min.js +++ b/dist/qiniu.min.js @@ -1,3 +1,3 @@ /*! qiniu-js v1.0.21 | Copyright 2015 by Qiniu */ -!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;var q=g._start_at?g._start_at.getTime():e.getTime();statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),e.getTime()-q,q,d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),e.response=that.stringifyJSON(h),b&&b(c,d,e)}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){var x=e.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2];var y=d._start_at?d._start_at.getTime():f.getTime();statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),f.getTime()-y,y,d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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); +!function(global){function createCookie(a,b,c){var d=new Date;d.setTime(d.getTime()+24*c*60*60*1e3);var e="; expires="+d.toGMTString();document.cookie=a+"="+b+e+"; path=/"}function readCookie(a){var b=a+"=";var c=document.cookie.split(";");for(var d=0,e=c.length;e>d;d++){var f=c[d];while(" "===f.charAt(0))f=f.substring(1,f.length);if(0===f.indexOf(b))return f.substring(b.length,f.length)}return null}window.localStorage||(window.localStorage={setItem:function(a,b){createCookie(a,b,30)},getItem:function(a){return readCookie(a)},removeItem:function(a){createCookie(a,"",-1)}});function QiniuJsSDK(){var that=this;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+"]";var d=c;for(var e=0;e")}function makeLogFunc(a){var b=a.toLowerCase();logger[b]=function(){if(window.console&&window.console.log&&logger.level>=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);var qiniuUploadUrl;qiniuUploadUrl="https:"===window.location.protocol?"https://up.qbox.me":"http://upload.qiniu.com";var qiniuUploadUrls=["http://upload.qiniu.com","http://up.qiniu.com"];var qiniuUpHosts={http:["http://upload.qiniu.com","http://up.qiniu.com"],https:["https://up.qbox.me"]};var changeUrlTimes=0;function StatisticsLogger(){var a="https://uplog.qbox.me/log/3";var b=[];var c={waiting:0,processing:1,finished:2};this.log=function(a,d,e,f,g,h,i,j,k,l){var m=Array.prototype.join.call(arguments,",");b.push({log:m,status:c.waiting}),logger.debug("[STATISTICS] send log to statistics server",m)};function d(){var a=[];for(var d=0;dg;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_decode=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+="";do f=b.indexOf(a.charAt(k++)),g=b.indexOf(a.charAt(k++)),h=b.indexOf(a.charAt(k++)),i=b.indexOf(a.charAt(k++)),j=f<<18|g<<12|h<<6|i,c=j>>16&255,d=j>>8&255,e=255&j,64===h?n[l++]=String.fromCharCode(c):64===i?n[l++]=String.fromCharCode(c,d):n[l++]=String.fromCharCode(c,d,e);while(k>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){var b=function(){var b=that.detectIEVersion();var c,d,e;var f="Safari"===moxie.core.utils.Env.browser&&moxie.core.utils.Env.version<=5&&"Windows"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.Env.osVersion||"Safari"===moxie.core.utils.Env.browser&&"iOS"===moxie.core.utils.Env.os&&"7"===moxie.core.utils.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))};var c=function(a){var b=[];var c=-1;for(var d=0;d=0?(d.bucket=d.scope.split(":")[0],d.key=d.scope.split(":")[1]):d.bucket=d.scope,d};var e=function(b){var e=d(b);var f=window.location.protocol+"//uc.qbox.me/v1/query?ak="+e.ak+"&bucket="+e.bucket;logger.debug("putPolicy: ",e),logger.debug("get uphosts from: ",f);var g=that.detectIEVersion();var h;g&&9>=g?(h=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):h=that.createAjax(),h.open("GET",f,!1);var i=function(){if(logger.debug("ajax.readyState: ",h.readyState),4===h.readyState)if(logger.debug("ajax.status: ",h.status),h.status<400){var a=that.parseJSON(h.responseText);qiniuUpHosts.http=c(a.http.up),qiniuUpHosts.https=c(a.https.up),logger.debug("get new uphosts: ",qiniuUpHosts),that.resetUploadUrl()}else logger.error("get uphosts error: ",h.responseText)};g&&9>=g?h.bind("readystatechange",i):h.onreadystatechange=i,h.send()};var f=function(b){return!that.token||a.uptoken_url&&that.tokenInfo.isExpired()?g(b):that.token};var g=function(b){if(a.uptoken)that.token=a.uptoken;else if(a.uptoken_url){logger.debug("get uptoken from: ",that.uptoken_url);var c=that.createAjax();if(c.open("GET",that.uptoken_url+"?"+ +new Date,!1),c.send(),200===c.status){var d=that.parseJSON(c.responseText);that.token=d.uptoken;var f=that.token.split(":");var g=that.parseJSON(that.URLSafeBase64Decode(f[2]));that.tokenMap||(that.tokenMap={});var h=function(a){return Math.ceil(a.getTime()/1e3)};var i=h(new Date(c.getResponseHeader("date")));var j=h(new Date);that.tokenInfo={serverDelay:j-i,deadline:g.deadline,isExpired:function(){var a=this.deadline-h(new Date)+this.serverDelay;return 600>a}},logger.debug("get new uptoken: ",that.token),logger.debug("get token info: ",that.tokenInfo)}else logger.error("get uptoken error: ",c.responseText)}else a.uptoken_func?(logger.debug("get uptoken from uptoken_func"),that.token=a.uptoken_func(b),logger.debug("get new uptoken: ",that.token)):logger.error("one of [uptoken, uptoken_url, uptoken_func] settings in options is required!");return that.token&&e(that.token),that.token};var h=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};var i=function(a){if(a&&a.match){var b=a.match(/^https?:\/\/([^:^\/]*)/);return b?b[1]:""}return""};var j=function(a){if(a&&a.match){var b=a.match(/(^https?)/);if(!b)return"";var c=b[1];return b=a.match(/^https?:\/\/([^:^\/]*):(\d*)/),b?b[2]:"http"===c?"80":"443"}return""};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!";if(!a.uptoken&&!a.uptoken_url&&!a.uptoken_func)throw"one of [uptoken, uptoken_url, uptoken_func] settings in options is required!";logger.debug("init uploader start"),logger.debug("environment: ",moxie.core.utils.Env),logger.debug("userAgent: ",navigator.userAgent);var k={};var l=a.init&&a.init.Error;var m=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 n="";var o={isResumeUpload:!1,resumeFilesize:0,startTime:"",currentTime:""};b(),logger.debug("invoke reset_chunk_size()"),logger.debug("op.chunk_size: ",a.chunk_size);var p={url:qiniuUploadUrl,multipart_params:{token:""}};var q=that.detectIEVersion();q&&9>=q&&(p.multipart_params.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),plupload.extend(k,a,p),logger.debug("option: ",k);var r=new plupload.Uploader(k);logger.debug("new plupload.Uploader(option)"),r.bind("Init",function(b,c){logger.debug("Init event activated"),a.get_new_uptoken||g(null)}),logger.debug("bind Init event"),r.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);var d=function(){return"ios"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};if(d())for(var e=0;e=g&&(f.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),logger.debug("directUpload multipart_params_obj: ",f);var i=a.x_vars;if(void 0!==i&&"object"==typeof i)for(var j in i)i.hasOwnProperty(j)&&("function"==typeof i[j]?f["x:"+j]=i[j](b,c):"object"!=typeof i[j]&&(f["x:"+j]=i[j]));b.setOption({url:qiniuUploadUrl,multipart:!0,chunk_size:e()?a.max_file_size:void 0,multipart_params:f})};var e=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/MicroMessenger/i)||"QQBrowser"===moxie.core.utils.Env.browser||a.match(/V1_AND_SQ/i))&&"android"===moxie.core.utils.Env.OS.toLowerCase()?!0:!1};var i=b.getOption&&b.getOption("chunk_size");if(i=i||b.settings&&b.settings.chunk_size,logger.debug("uploader.runtime: ",r.runtime),logger.debug("chunk_size: ",i),"html5"!==r.runtime&&"flash"!==r.runtime||!i)logger.debug("directUpload because uploader.runtime !== 'html5' || uploader.runtime !== 'flash' || !chunk_size"),d(b,c,that.key_handler);else if(c.sizel-m&&100!==j.percent&&c.size===j.total?(c.percent=j.percent,c.loaded=j.offset,n=j.ctx,o.isResumeUpload=!0,o.resumeFilesize=j.offset,j.offset+k>c.size&&(k=c.size-j.offset)):localStorage.removeItem(c.name)}o.startTime=(new Date).getTime();var q={};var s=that.detectIEVersion();s&&9>=s&&(q.accept="text/plain; charset=utf-8",logger.debug("add accept text/plain in multipart params")),b.setOption({url:qiniuUploadUrl+"/mkblk/"+k,multipart:!1,chunk_size:i,required_features:"chunks",headers:{Authorization:"UpToken "+f(c)},multipart_params:q})}}),logger.debug("bind BeforeUpload event"),r.bind("UploadProgress",function(a,b){logger.trace("UploadProgress event activated"),o.currentTime=(new Date).getTime();var c=o.currentTime-o.startTime;var d=b.loaded||0;o.isResumeUpload&&(d=b.loaded-o.resumeFilesize),b.speed=(d/c*1e3).toFixed(0)||0}),logger.debug("bind UploadProgress event"),r.bind("ChunkUploaded",function(a,b,c){logger.debug("ChunkUploaded event activated"),logger.debug("ChunkUploaded file: ",b),logger.debug("ChunkUploaded info: ",c);var d=that.parseJSON(c.response);logger.debug("ChunkUploaded res: ",d),n=n?n+","+d.ctx:d.ctx;var e=c.total-c.offset;var g=a.getOption&&a.getOption("chunk_size");g=g||a.settings&&a.settings.chunk_size,g>e&&(a.setOption({url:qiniuUploadUrl+"/mkblk/"+e}),logger.debug("up.setOption url: ",qiniuUploadUrl+"/mkblk/"+e)),a.setOption({headers:{Authorization:"UpToken "+f(b)}}),localStorage.setItem(b.name,that.stringifyJSON({ctx:n,percent:b.percent,total:c.total,offset:c.offset,time:(new Date).getTime()}))}),logger.debug("bind ChunkUploaded event");var s=qiniuUploadUrls.length;var t=function(a){return s-->0?(setTimeout(function(){that.resetUploadUrl(),a.status=plupload.QUEUED,r.stop(),r.start()},0),!0):(s=qiniuUploadUrls.length,!1)};return r.bind("Error",function(b){return function(c,d){logger.error("Error event activated"),logger.error("err: ",d);var e=new Date;var f="";var g=d.file;if(g){switch(d.code){case plupload.FAILED:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.FILE_SIZE_ERROR:var h=c.getOption&&c.getOption("max_file_size");h=h||c.settings&&c.settings.max_file_size,f="\u6d4f\u89c8\u5668\u6700\u5927\u53ef\u4e0a\u4f20"+h+"\u3002\u66f4\u5927\u6587\u4ef6\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u3002";break;case plupload.FILE_EXTENSION_ERROR:f="\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002";break;case plupload.HTTP_ERROR:if(""===d.response){if(f=d.message||"\u672a\u77e5\u7f51\u7edc\u9519\u8bef\u3002",!t(g))return;break}var k=that.parseJSON(d.response);var l=k.error;switch(d.status){case 400:f="\u8bf7\u6c42\u62a5\u6587\u683c\u5f0f\u9519\u8bef\u3002";break;case 401:f="\u5ba2\u6237\u7aef\u8ba4\u8bc1\u6388\u6743\u5931\u8d25\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 405:f="\u5ba2\u6237\u7aef\u8bf7\u6c42\u9519\u8bef\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;case 579:f="\u8d44\u6e90\u4e0a\u4f20\u6210\u529f\uff0c\u4f46\u56de\u8c03\u5931\u8d25\u3002";break;case 599:if(f="\u7f51\u7edc\u8fde\u63a5\u5f02\u5e38\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002",!t(g))return;break;case 614:f="\u6587\u4ef6\u5df2\u5b58\u5728\u3002";try{k=that.parseJSON(k.error),l=k.error||"file exists"}catch(m){l=k.error||"file exists"}break;case 631:f="\u6307\u5b9a\u7a7a\u95f4\u4e0d\u5b58\u5728\u3002";break;case 701:f="\u4e0a\u4f20\u6570\u636e\u5757\u6821\u9a8c\u51fa\u9519\u3002\u8bf7\u91cd\u8bd5\u6216\u63d0\u4ea4\u53cd\u9988\u3002";break;default:if(f="\u672a\u77e5\u9519\u8bef\u3002",!t(g))return}f=f+"("+d.status+"\uff1a"+l+")";break;case plupload.SECURITY_ERROR:f="\u5b89\u5168\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002";break;case plupload.GENERIC_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.IO_ERROR:f="\u4e0a\u4f20\u5931\u8d25\u3002\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002";break;case plupload.INIT_ERROR:f="\u7f51\u7ad9\u914d\u7f6e\u9519\u8bef\u3002\u8bf7\u8054\u7cfb\u7f51\u7ad9\u7ba1\u7406\u5458\u3002",r.destroy();break;default:if(f=d.message+d.details,!t(g))return}b&&b(c,d,f)}if(c.refresh(),!a.disable_statistics_report){var n=d&&d.responseHeaders&&d.responseHeaders.match?d.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/):[];var o=n[2];var p=plupload.HTTP_ERROR?d.status:d.code;var q=g._start_at?g._start_at.getTime():e.getTime();statisticsLogger.log(0===p?ExtraErrors.NetworkError:p,o,i(c.settings.url),void 0,j(c.settings.url),(e.getTime()-q)/1e3,q/1e3,d.file.size*(d.file.percent/100),"jssdk-"+c.runtime,g.size)}}}(l)),logger.debug("bind Error event"),r.bind("FileUploaded",function(b){return function(c,d,e){logger.debug("FileUploaded event activated"),logger.debug("FileUploaded file: ",d),logger.debug("FileUploaded info: ",e);var f=new Date;var g=function(c,d,e){if(logger.debug("FileUploaded last step:",e),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.response),a),e.response=that.stringifyJSON(h),b&&b(c,d,e)}else r.trigger("Error",{status:f.status,response:f.responseText,file:d,code:plupload.HTTP_ERROR})},f.send("key="+that.parseJSON(e.response).key+"&domain="+a.domain)}else b&&b(c,d,e)};var k=that.parseJSON(e.response);if(n=n?n:k.ctx,logger.debug("ctx: ",n),n){var l="";logger.debug("save_key: ",a.save_key),a.save_key||(l=h(c,d,that.key_handler),l=l?"/key/"+that.URLSafeBase64Encode(l):"");var m="/fname/"+that.URLSafeBase64Encode(d.name);logger.debug("op.x_vars: ",a.x_vars);var o=a.x_vars,p="",q="";if(void 0!==o&&"object"==typeof o)for(var s in o)o.hasOwnProperty(s)&&("function"==typeof o[s]?p=that.URLSafeBase64Encode(o[s](c,d)):"object"!=typeof o[s]&&(p=that.URLSafeBase64Encode(o[s])),q+="/x:"+s+"/"+p);var t=qiniuUploadUrl+"/mkfile/"+d.size+l+m+q;var u=that.detectIEVersion();var v;u&&9>=u?(v=new moxie.xhr.XMLHttpRequest,moxie.core.utils.Env.swf_url=a.flash_swf_url):v=that.createAjax(),v.open("POST",t,!0),v.setRequestHeader("Content-Type","text/plain;charset=UTF-8"),console.log("uptoken:"+that.token),v.setRequestHeader("Authorization","UpToken "+that.token);var w=function(){if(logger.debug("ajax.readyState: ",v.readyState),4===v.readyState){localStorage.removeItem(d.name);var a;200===v.status?(a={status:v.status,response:v.responseText,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is success: ",a),g(c,d,a)):(a={status:v.status,response:v.responseText,file:d,code:-200,responseHeaders:v.getAllResponseHeaders()},logger.debug("mkfile is error: ",a),r.trigger("Error",a))}};u&&9>=u?v.bind("readystatechange",w):v.onreadystatechange=w,v.send(n),logger.debug("mkfile: ",t)}else g(c,d,e);if(!a.disable_statistics_report){console.log(123),console.log(e.responseHeaders);var x=e.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2];var y=d._start_at?d._start_at.getTime():f.getTime();statisticsLogger.log(e.status,x,i(c.settings.url),void 0,j(c.settings.url),(f.getTime()-y)/1e3,y/1e3,d.size,"jssdk-"+c.runtime,d.size)}}}(m)),logger.debug("bind FileUploaded event"),r.bind("FilesRemoved",function(b,c){var d=new Date;if(!a.disable_statistics_report)for(var e=0;eg;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 d26b77a0..efb93bb5 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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","startAt","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","exif","get","pipeline","arr","isArray","Object","errOp","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","createCookie","key","value","exp","date","Date","setTime","getTime","expires","toGMTString","document","cookie","readCookie","nameEQ","ca","split","i","max","length","c","charAt","substring","indexOf","window","localStorage","setItem","getItem","removeItem","QiniuJsSDK","that","this","detectIEVersion","v","div","createElement","all","getElementsByTagName","innerHTML","logger","MUTE","FATA","ERROR","WARN","INFO","DEBUG","TRACE","level","log","type","args","header","msg","stringifyJSON","console","unshift","apply","getElementById","makeLogFunc","code","func","toLowerCase","Array","prototype","slice","call","arguments","property","hasOwnProperty","qiniuUploadUrl","location","protocol","qiniuUploadUrls","qiniuUpHosts","http","https","changeUrlTimes","StatisticsLogger","qiniuCollectUploadLogUrl","queue","TaskStatus","waiting","processing","finished","req_id","host","remote_ip","port","duration","up_time","bytes_sent","up_type","file_size","join","push","status","debug","tick","unFinishedTasks","send","task","ajax","createAjax","open","setRequestHeader","token","onreadystatechange","readyState","setInterval","statisticsLogger","ExtraErrors","ZeroSizeFile","InvalidToken","InvalidArgument","InvalidFile","Cancelled","NetworkError","UnknownError","TimedOut","UnknownHost","CannotConnectToHost","NetworkConnectionLost","resetUploadUrl","hosts","isImage","url","test","getFileExtension","filename","tempArr","ext","pop","utf8_encode","argString","string","utftext","start","end","stringl","n","c1","charCodeAt","enc","String","fromCharCode","RangeError","c2","base64_decode","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","dec","tmp_arr","base64_encode","URLSafeBase64Encode","replace","URLSafeBase64Decode","argument","xmlhttp","XMLHttpRequest","ActiveXObject","parseJSON","JSON","parse","rx_dangerous","text","lastIndex","a","toString","eval","obj","stringify","map","strArr","len","trim","uploader","op","reset_chunk_size","ie","BLOCK_BITS","MAX_CHUNK_SIZE","chunk_size","isSpecialSafari","moxie","core","utils","Env","browser","version","os","osVersion","runtimes","plupload","parseSize","getHosts","result","uploadIndex","uploadDomain","getPutPolicy","uptoken","segments","ak","putPolicy","scope","bucket","getUpHosts","uphosts_url","xhr","swf_url","flash_swf_url","res","responseText","up","error","bind","getUptoken","file","uptoken_url","tokenInfo","isExpired","getNewUpToken","tokenMap","getTimestamp","time","Math","ceil","serverTime","getResponseHeader","clientTime","serverDelay","deadline","leftTime","uptoken_func","getFileKey","unique_names","save_key","getOption","settings","name","id","getDomainFromUrl","match","groups","getPortFromUrl","log_level","domain","browse_button","navigator","userAgent","option","_Error_Handler","init","Error","_FileUploaded_Handler","FileUploaded","key_handler","Key","ctx","speedCalInfo","isResumeUpload","resumeFilesize","startTime","currentTime","defaultSetting","multipart_params","accept","extend","Uploader","params","get_new_uptoken","files","auto_start","is_ios","OS","setTimeout","refresh","_start_at","speed","directUpload","multipart_params_obj","x_vars","undefined","x_key","setOption","multipart","is_android_weixin_or_qq","max_file_size","ua","runtime","size","localFileInfo","blockSize","now","before","aDay","percent","total","loaded","offset","required_features","headers","Authorization","trace","timeUsed","fileUploaded","toFixed","info","response","leftSize","retries","unknow_error_retry","QUEUED","stop","err","nowTime","errTip","FAILED","FILE_SIZE_ERROR","FILE_EXTENSION_ERROR","HTTP_ERROR","message","errorObj","errorText","e","SECURITY_ERROR","GENERIC_ERROR","IO_ERROR","INIT_ERROR","destroy","details","disable_statistics_report","matchedGroups","responseHeaders","errcode","startAt","last_step","downtoken_url","ajax_downtoken","res_downtoken","info_extended","trigger","fname","x_val","x_vars_url","ajaxInfo","getAllResponseHeaders","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","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 e648e2d0..479554de 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -802,7 +802,7 @@ var clientTime = getTimestamp(new Date()); that.tokenInfo = { serverDelay: clientTime - serverTime, - deadline: putPolicy.deadline, + deadline: putPolicy.deadline/1000, isExpired: function () { var leftTime = this.deadline - getTimestamp(new Date()) + this.serverDelay; return leftTime < 600; @@ -1352,8 +1352,10 @@ // add send log for upload error if (!op.disable_statistics_report) { + console.log(334); var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/) : []; - var req_id = matchedGroups[2]; + console.log(err); + var req_id = matchedGroups[2].replace(/[\r\n]/g,""); var errcode = plupload.HTTP_ERROR ? err.status : err.code; var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( @@ -1379,6 +1381,7 @@ // - 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) { + console.log(123); return function (up, file, info) { logger.debug("FileUploaded event activated"); logger.debug("FileUploaded file: ", file); @@ -1471,6 +1474,7 @@ } ajax.open('POST', url, true); ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); + console.log('uptoken:'+that.token); ajax.setRequestHeader('Authorization', 'UpToken ' + that.token); var onreadystatechange = function () { logger.debug("ajax.readyState: ", ajax.readyState); @@ -1511,7 +1515,8 @@ // send statistics log if (!op.disable_statistics_report) { - var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2]; + console.log(info.responseHeaders); + var req_id = info.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/)[2].replace(/[\r\n]/g,""); var startAt = file._start_at ? file._start_at.getTime() : nowTime.getTime(); statisticsLogger.log( info.status, @@ -1538,6 +1543,7 @@ var nowTime = new Date(); // add cancel log if (!op.disable_statistics_report) { + console.log(223); for (var i = 0; i < files.length; i++) { statisticsLogger.log( ExtraErrors.Cancelled, From c08a85088bed0c49bf1c7ab3d3a44c7f9ca2f4e5 Mon Sep 17 00:00:00 2001 From: zhangheng Date: Tue, 15 Aug 2017 16:08:20 +0800 Subject: [PATCH 44/44] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84console.log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/qiniu.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/qiniu.js b/src/qiniu.js index 479554de..a426d58e 100644 --- a/src/qiniu.js +++ b/src/qiniu.js @@ -1352,7 +1352,6 @@ // add send log for upload error if (!op.disable_statistics_report) { - console.log(334); var matchedGroups = (err && err.responseHeaders && err.responseHeaders.match) ? err.responseHeaders.match(/(X-Reqid\:\ )([\w\.\%-]*)/) : []; console.log(err); var req_id = matchedGroups[2].replace(/[\r\n]/g,""); @@ -1381,7 +1380,6 @@ // - 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) { - console.log(123); return function (up, file, info) { logger.debug("FileUploaded event activated"); logger.debug("FileUploaded file: ", file); @@ -1543,7 +1541,6 @@ var nowTime = new Date(); // add cancel log if (!op.disable_statistics_report) { - console.log(223); for (var i = 0; i < files.length; i++) { statisticsLogger.log( ExtraErrors.Cancelled,