github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/public/libs/qiniu-js-sdk-master/README.md (about) 1 qiniu-js-sdk 2 ============ 3 4 基于七牛API及Plupload开发的前端JavaScript SDK 5 6 示例网站:[七牛JavaScript SDK 示例网站 - 配合七牛nodejs SDK ](http://jssdk.demo.qiniu.io/) 7 ## 概述 8 9 本SDK适用于IE8+、Chrome、Firefox、Safari 等浏览器,基于 七牛云存储官方API 构建,其中上传功能基于 Plupload 插件封装。开发者使用本 SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作。本 SDK 可使开发者忽略上传底层实现细节,而更多的关注 UI 层的展现。 10 11 ### 功能简介 12 13 * 上传 14 * html5模式大于4M时可分块上传,小于4M时直传 15 * Flash、html4模式直接上传 16 * 继承了Plupload的功能,可筛选文件上传、拖曳上传等 17 * 下载(公开资源) 18 * 数据处理(图片) 19 * imageView2(缩略图) 20 * imageMogr2(高级处理,包含缩放、裁剪、旋转等) 21 * imageInfo (获取基本信息) 22 * exif (获取图片EXIF信息) 23 * watermark (文字、图片水印) 24 * pipeline (管道,可对imageView2、imageMogr2、watermark进行链式处理) 25 26 ### SDK构成介绍 27 * Plupload ,建议 2.1.1 及以上版本 28 * qiniu.js,SDK主体文件,上传功能\数据处理实现 29 30 31 ## 安装和运行程序 32 * 服务端准备 33 34 本SDK依赖服务端颁发upToken,可以通过以下二种方式实现: 35 * 利用[七牛服务端SDK](http://developer.qiniu.com/docs/v6/sdk/)构建后端服务 36 * 利用七牛底层API构建服务,详见七牛[上传策略](http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html)和[上传凭证](http://developer.qiniu.com/docs/v6/api/reference/security/upload-token.html) 37 38 39 后端服务应提供一个URL地址,供SDK初始化使用,前端通过Ajax请求该地址后获得upToken。Ajax请求成功后,服务端应返回如下格式的json: 40 41 ``` 42 { 43 "uptoken": "0MLvWPnyya1WtPnXFy9KLyGHyFPNdZceomL..." 44 } 45 ``` 46 * 引入Plupload 47 48 * [Plupload下载](http://plupload.com/download),建议 2.1.1 及以上版本 49 50 * 引入`plupload.full.min.js`(产品环境)或 引入`plupload.dev.js`和`moxie.js`(开发调试) 51 52 * 引入qiniu.js 53 * 获取SDK源码 `git clone git@github.com:qiniupd/qiniu-js-sdk.git`,`qiniu.js`位于`src`目录内 54 55 * 初始化上传 56 57 ```javascript 58 59 var uploader = Qiniu.uploader({ 60 runtimes: 'html5,flash,html4', //上传模式,依次退化 61 browse_button: 'pickfiles', //上传选择的点选按钮,**必需** 62 uptoken_url: '/uptoken', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) 63 // downtoken_url: '/downtoken', 64 // Ajax请求downToken的Url,私有空间时使用,JS-SDK将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址 65 // uptoken : '<Your upload token>', //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成 66 // unique_names: true, // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名) 67 // save_key: true, // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 68 domain: 'http://qiniu-plupload.qiniudn.com/', //bucket 域名,下载资源时用到,**必需** 69 container: 'container', //上传区域DOM ID,默认是browser_button的父元素, 70 max_file_size: '100mb', //最大文件体积限制 71 flash_swf_url: 'js/plupload/Moxie.swf', //引入flash,相对路径 72 max_retries: 3, //上传失败最大重试次数 73 dragdrop: true, //开启可拖曳上传 74 drop_element: 'container', //拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传 75 chunk_size: '4mb', //分块上传时,每片的体积 76 auto_start: true, //选择文件后自动上传,若关闭需要自己绑定事件触发上传, 77 //x_vars : { 78 // 自定义变量,参考http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html 79 // 'time' : function(up,file) { 80 // var time = (new Date()).getTime(); 81 // do something with 'time' 82 // return time; 83 // }, 84 // 'size' : function(up,file) { 85 // var size = file.size; 86 // do something with 'size' 87 // return size; 88 // } 89 //}, 90 init: { 91 'FilesAdded': function(up, files) { 92 plupload.each(files, function(file) { 93 // 文件添加进队列后,处理相关的事情 94 }); 95 }, 96 'BeforeUpload': function(up, file) { 97 // 每个文件上传前,处理相关的事情 98 }, 99 'UploadProgress': function(up, file) { 100 // 每个文件上传时,处理相关的事情 101 }, 102 'FileUploaded': function(up, file, info) { 103 // 每个文件上传成功后,处理相关的事情 104 // 其中 info 是文件上传成功后,服务端返回的json,形式如 105 // { 106 // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", 107 // "key": "gogopher.jpg" 108 // } 109 // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html 110 111 // var domain = up.getOption('domain'); 112 // var res = parseJSON(info); 113 // var sourceLink = domain + res.key; 获取上传成功后的文件的Url 114 }, 115 'Error': function(up, err, errTip) { 116 //上传出错时,处理相关的事情 117 }, 118 'UploadComplete': function() { 119 //队列文件处理完毕后,处理相关的事情 120 }, 121 'Key': function(up, file) { 122 // 若想在前端对每个文件的key进行个性化处理,可以配置该函数 123 // 该配置必须要在 unique_names: false , save_key: false 时才生效 124 125 var key = ""; 126 // do something with key here 127 return key 128 } 129 } 130 }); 131 132 // domain 为七牛空间(bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取 133 134 // uploader 为一个plupload对象,继承了所有plupload的方法,参考http://plupload.com/docs 135 ``` 136 137 * 运行网站,通过点击`pickfiles`元素,选择文件后上传 138 139 * 对上传成功的图片进行数据处理 140 141 * watermark(水印) 142 143 ```javascript 144 145 // key 为每个文件上传成功后,服务端返回的json字段,即资源的最终名字,下同 146 // key 可在每个文件'FileUploaded'事件被触发时获得 147 148 var imgLink = Qiniu.watermark({ 149 mode: 1, // 图片水印 150 image: 'http://www.b1.qiniudn.com/images/logo-2.png', // 图片水印的Url,mode = 1 时 **必需** 151 dissolve: 50, // 透明度,取值范围1-100,非必需,下同 152 gravity: 'SouthWest', // 水印位置,为以下参数[NorthWest、North、NorthEast、West、Center、East、SouthWest、South、SouthEast]之一 153 dx: 100, // 横轴边距,单位:像素(px) 154 dy: 100 // 纵轴边距,单位:像素(px) 155 }, key); // key 为非必需参数,下同 156 157 // imgLink 可以赋值给 html 的 img 元素的 src 属性,下同 158 159 // 若未指定key,可以通过以下方式获得完整的 imgLink,下同 160 // imgLink = '<domain>/<key>?' + imgLink 161 // <domain> 为七牛空间(bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取 162 163 ``` 164 165 或 166 167 ```javascript 168 169 var imgLink = Qiniu.watermark({ 170 mode: 2, // 文字水印 171 text: 'hello world !', // 水印文字,mode = 2 时 **必需** 172 dissolve: 50, // 透明度,取值范围1-100,非必需,下同 173 gravity: 'SouthWest', // 水印位置,同上 174 fontsize: 500, // 字体大小,单位: 缇 175 font : '黑体', // 水印文字字体 176 dx: 100, // 横轴边距,单位:像素(px) 177 dy: 100, // 纵轴边距,单位:像素(px) 178 fill: '#FFF000' // 水印文字颜色,RGB格式,可以是颜色名称 179 }, key); 180 181 ``` 182 具体水印参数解释见[水印(watermark)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/watermark.html) 183 * imageView2 184 185 ```javascript 186 187 var imgLink = Qiniu.imageView2({ 188 mode: 3, // 缩略模式,共6种[0-5] 189 w: 100, // 具体含义由缩略模式决定 190 h: 100, // 具体含义由缩略模式决定 191 q: 100, // 新图的图像质量,取值范围:1-100 192 format: 'png' // 新图的输出格式,取值范围:jpg,gif,png,webp等 193 }, key); 194 195 ``` 196 具体缩略参数解释见[图片处理(imageView2)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imageview2.html) 197 * imageMogr2 198 199 ```javascript 200 201 var imgLink = Qiniu.imageMogr2({ 202 auto-orient: true, // 布尔值,是否根据原图EXIF信息自动旋正,便于后续处理,建议放在首位。 203 strip: true, // 布尔值,是否去除图片中的元信息 204 thumbnail: '1000x1000' // 缩放操作参数 205 crop: '!300x400a10a10', // 裁剪操作参数 206 gravity: 'NorthWest', // 裁剪锚点参数 207 quality: 40, // 图片质量,取值范围1-100 208 rotate: 20, // 旋转角度,取值范围1-360,缺省为不旋转。 209 format: 'png',// 新图的输出格式,取值范围:jpg,gif,png,webp等 210 blur:'3x5' // 高斯模糊参数 211 }, key); 212 213 ``` 214 215 具体高级图像处理参数解释见[高级图像处理(imageMogr2)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imagemogr2.html) 216 * imageInfo 217 218 ```javascript 219 var imageInfoObj = Qiniu.imageInfo(key); 220 ``` 221 具体 imageInfo 解释见[图片基本信息(imageInfo)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imageinfo.html) 222 223 Ajax跨域限制,IE系列此函数只支持IE10+ 224 * exif 225 226 ```javascript 227 var exifOjb = Qiniu.exif(key); 228 ``` 229 230 具体 exif 解释见[图片EXIF信息(exif)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/exif.html) 231 232 Ajax跨域限制,IE系列此函数只支持IE10+ 233 * pipeline(管道操作) 234 235 ```javascript 236 237 var fopArr = [{ 238 fop: 'watermark', // 指定watermark操作 239 mode: 2, // 此参数同watermark函数的参数,下同。 240 text: 'hello world !', 241 dissolve: 50, 242 gravity: 'SouthWest', 243 fontsize: 500, 244 font : '黑体', 245 dx: 100, 246 dy: 100, 247 fill: '#FFF000' 248 },{ 249 fop: 'imageView2', // 指定imageView2操作 250 mode: 3, // 此参数同imageView2函数的参数,下同 251 w: 100, 252 h: 100, 253 q: 100, 254 format: 'png' 255 },{ 256 fop: 'imageMogr2', // 指定imageMogr2操作 257 auto-orient: true, // 此参数同imageMogr2函数的参数,下同。 258 strip: true, 259 thumbnail: '1000x1000' 260 crop: '!300x400a10a10', 261 gravity: 'NorthWest', 262 quality: 40, 263 rotate: 20, 264 format: 'png', 265 blur:'3x5' 266 }]; 267 268 // fopArr 可以为三种类型'watermark'、'imageMogr2'、'imageView2'中的任意1-3个 269 // 例如只对'watermark'、'imageMogr2'进行管道操作,则如下即可 270 // var fopArr = [{ 271 // fop: 'watermark', // 指定watermark操作 272 // mode: 2, // 此参数同watermark函数的参数,下同。 273 // text: 'hello world !', 274 // dissolve: 50, 275 // gravity: 'SouthWest', 276 // fontsize: 500, 277 // font : '黑体', 278 // dx: 100, 279 // dy: 100, 280 // fill: '#FFF000' 281 // },{ 282 // fop: 'imageMogr2', // 指定imageMogr2操作 283 // auto-orient: true, // 此参数同imageMogr2函数的参数,下同。 284 // strip: true, 285 // thumbnail: '1000x1000' 286 // crop: '!300x400a10a10', 287 // gravity: 'NorthWest', 288 // quality: 40, 289 // rotate: 20, 290 // format: 'png', 291 // blur:'3x5' 292 // }]; 293 294 295 var imgLink = Qiniu.pipeline(fopArr, key)); 296 297 ``` 298 具体管道操作解释见[管道操作](http://developer.qiniu.com/docs/v6/api/overview/fop/pipeline.html) 299 300 ## 运行示例 301 302 直接运行本SDK示例网站的服务 303 304 * 安装 [Nodejs](http://nodejs.org/download/)、[npm](https://www.npmjs.org/) 305 306 * 获取源代码: 307 `git clone git@github.com:qiniupd/qiniu-js-sdk.git` 308 * 进入`demo`目录,修改`config.js`,`Access Key`和`Secret Key` 按如下方式获取 309 310 * [开通七牛开发者帐号](https://portal.qiniu.com/signup) 311 * [登录七牛开发者自助平台,查看 AccessKey 和 SecretKey](https://portal.qiniu.com/setting/key) 。 312 313 ```javascript 314 315 module.exports = { 316 'ACCESS_KEY': '<Your Access Key>', 317 'SECRET_KEY': '<Your Secret Key>', 318 'Bucket_Name': '<Your Bucket Name>', 319 'Port': 18080, 320 'Uptoken_Url': '<Your Uptoken_Url>', 321 'Domain': '<Your Bucket Domain>' 322 } 323 324 ``` 325 326 * 在根目录运行`make`启动 327 328 * 访问`http://127.0.0.1:18080/`或`http://localhost:18080/` 329 330 ## 说明 331 332 1. 本SDK依赖Plupload,初始化之前请引入Plupload。 333 334 2. 本SDK依赖uptoken,可以通过提供Ajax请求地址 `uptoken_url` 或者直接设置 `uptoken` 实现,强烈建议前者。 335 336 3. 如果您想了解更多七牛的上传策略,建议您仔细阅读 [七牛官方文档-上传](http://developer.qiniu.com/docs/v6/api/reference/up/)。 337 另外,七牛的上传策略是在后端服务指定的,本SDK的 setOption API 只是设置 Plupload的初始化参数,和上传策略无关。 338 339 4. 如果您想了解更多七牛的图片处理,建议您仔细阅读 [七牛官方文档-图片处理](http://developer.qiniu.com/docs/v6/api/reference/fop/image/) 340 341 5. 如果是 https 网站,可以将js里面的 http://up.qiniu.com 替换为 https://up.qbox.me 342 343 6. 本SDK示例生成upToken时,指定的`Bucket Name`为公开空间,所以可以公开访问上传成功后的资源。若您生成upToken时,指定的`Bucket Name`为私有空间,那您还需要在服务端进行额外的处理才能访问您上传的资源。具体参见[下载凭证](http://developer.qiniu.com/docs/v6/api/reference/security/download-token.html)。本SDK数据处理部分功能不适用于私有空间。 344 345 ## 贡献代码 346 347 1. 登录 https://github.com 348 349 2. Fork git@github.com:qiniupd/qiniu-js-sdk.git 350 351 3. 创建您的特性分支 (git checkout -b new-feature) 352 353 4. 提交您的改动 (git commit -am 'Added some features or fixed a bug') 354 355 5. 将您的改动记录提交到远程 git 仓库 (git push origin new-feature) 356 357 6. 然后到 github 网站的该 git 远程仓库的 new-feature 分支下发起 Pull Request 358 359 360 ## 许可证 361 362 > Copyright (c) 2014 qiniu.com 363 364 ## 基于 GPL V2 协议发布: 365 366 > [www.gnu.org/licenses/gpl-2.0.html](http://www.gnu.org/licenses/gpl-2.0.html)