Skip to content

Commit 205aadd

Browse files
authored
Merge pull request #257 from winddies/KODO-3028
Kodo 3028
2 parents 2d78f18 + c08a850 commit 205aadd

22 files changed

+4776
-3624
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
node_modules
33
bower_components
44
demo/config.js
5+
deploy.sh

.travis.yml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
language: node_js
22
node_js:
3-
- "0.12"
3+
- '4'
44
cache:
55
directories:
6-
- node_modules
7-
- bower_components
6+
- node_modules
7+
- bower_components
88
install:
9-
- npm install
10-
- bower install
9+
- npm install
10+
- bower install
1111
script:
12-
- grunt
12+
- grunt
13+
deploy:
14+
provider: npm
15+
16+
api_key:
17+
secure: d06l6wsuv/YFeY3E0TRGemGjtQ7LZdN9WxiFnseT2exTFkDgMw9EV2uOUWllXNrbxXUY+2ZpDswtYrgZ4exQGfKKQRGFy6/g8oxPgyylVwBz98vlie8NvXXmANoyt7mwQwjninf5/XUiY3cwn9YCaU1jyxcayFdQTex05T++qvc=
18+
on:
19+
tags: true

README.md

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,26 @@ Qiniu-JavaScript-SDK
1414

1515
Qiniu-JavaScript-SDK (下文简称为 JS-SDK)适用于 IE8+、Chrome、Firefox、Safari 等浏览器,基于七牛云存储官方 API 构建,其中上传功能基于 [Plupload](http://www.plupload.com/) 插件封装。开发者基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作。
1616

17+
不考虑兼容性的情况下,如手机端,建议直接使用 Formdata 结合七牛[表单上传](https://developer.qiniu.com/kodo/manual/form-upload)的方式上传文件。
18+
19+
[ Formdata 上传 demo ](http://jssdk.demo.qiniu.io/formdata)
20+
21+
![ Formdata ](http://oky1vwhqm.bkt.clouddn.com/1486368013.png)
22+
1723
Qiniu-JavaScript-SDK 为客户端 SDK,没有包含 token 生成实现,为了安全,token 建议通过网络从服务端获取,具体生成代码可以参考以下服务端 SDK 的文档。
1824

19-
- [Java](http://developer.qiniu.com/code/v7/sdk/android.html)
20-
- [PHP](http://developer.qiniu.com/code/v7/sdk/php.html)
21-
- [Python](http://developer.qiniu.com/code/v7/sdk/python.html)
22-
- [Ruby](http://developer.qiniu.com/code/v6/sdk/ruby.html)
23-
- [Go](http://developer.qiniu.com/code/v7/sdk/go.html)
24-
- [Node.js](http://developer.qiniu.com/code/v6/sdk/nodejs.html)
25-
- [C#](http://developer.qiniu.com/code/v6/sdk/csharp.html)
26-
- [C/C++](http://developer.qiniu.com/code/v6/sdk/cpp.html)
25+
- [Android](https://developer.qiniu.com/kodo/sdk/android)
26+
- [Java](https://developer.qiniu.com/kodo/sdk/java)
27+
- [PHP](https://developer.qiniu.com/kodo/sdk/php)
28+
- [Python](https://developer.qiniu.com/kodo/sdk/python)
29+
- [Ruby](https://developer.qiniu.com/kodo/sdk/ruby)
30+
- [Go](https://developer.qiniu.com/kodo/sdk/go)
31+
- [Node.js](https://developer.qiniu.com/kodo/sdk/nodejs)
32+
- [C#](https://developer.qiniu.com/kodo/sdk/csharp)
33+
- [C/C++](https://developer.qiniu.com/kodo/sdk/cpp)
34+
- [Objective-C](https://developer.qiniu.com/kodo/sdk/objc)
2735

28-
Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js 服务器端 SDK ](http://developer.qiniu.com/code/v6/sdk/nodejs.html) 开发的。
36+
Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js 服务器端 SDK ](https://developer.qiniu.com/kodo/sdk/nodejs) 开发的。
2937

3038
<!--
3139
本 SDK 可使开发者忽略上传底层实现细节,而更多的关注 UI 层的展现。
@@ -77,14 +85,14 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
7785
<a id="usage"></a>
7886
### 准备
7987

80-
- JS-SDK 的上传功能基于 [Plupload](http://www.plupload.com/) 插件封装的,所以需要[下载 Plupload](http://plupload.com/download),建议使用 2.1.1 版本
88+
- JS-SDK 的上传功能基于 [Plupload](http://www.plupload.com/) 插件封装的,所以需要[下载 Plupload](http://plupload.com/download)
8189
您也可以访问[ 开放静态文件 CDN ](http://staticfile.org/),搜索 plupload,使用 CDN 加速的静态文件地址。
8290

83-
- 在使用 JS-SDK 之前,您必须先注册一个七牛帐号,并登录控制台获取一对有效的 AccessKey 和 SecretKey,您可以阅读[ 如何接入七牛 ](http://developer.qiniu.com/article/kodo/kodo-first/quickstart.html)[ 安全机制 ](http://developer.qiniu.com/article/kodo/kodo-developer/index.html#security) 以进一步了解如何正确使用和管理密钥 。
91+
- 在使用 JS-SDK 之前,您必须先注册一个七牛帐号,并登录控制台获取一对有效的 AccessKey 和 SecretKey,您可以阅读[ 快速入门 ](https://developer.qiniu.com/kodo/manual/console-quickstart)[ 安全机制 ](https://developer.qiniu.com/kodo/manual/security#security) 以进一步了解如何正确使用和管理密钥 。
8492

8593
- JS-SDK 依赖服务端颁发 uptoken,可以通过以下二种方式实现:
86-
- 利用[七牛服务端 SDK ](http://developer.qiniu.com/resource/official.html#sdk)构建后端服务
87-
- 利用七牛底层 API 构建服务,详见七牛[上传策略](http://developer.qiniu.com/article/developer/security/put-policy.html)[上传凭证](http://developer.qiniu.com/article/developer/security/upload-token.html)
94+
- 利用[七牛服务端 SDK ](https://developer.qiniu.com/sdk#sdk)构建后端服务
95+
- 利用七牛底层 API 构建服务,详见七牛[上传策略](https://developer.qiniu.com/kodo/manual/put-policy)[上传凭证](https://developer.qiniu.com/kodo/manual/upload-token)
8896

8997
后端服务应提供一个 URL 地址,供 JS-SDK 初始化使用,前端通过 Ajax 请求该地址后获得 uptoken。Ajax 请求成功后,服务端应返回如下格式的 json:
9098

@@ -174,6 +182,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
174182
175183
```JavaScript
176184
var uploader = Qiniu.uploader({
185+
disable_statistics_report: false, // 禁止自动发送上传统计信息到七牛,默认允许发送
177186
runtimes: 'html5,flash,html4', // 上传模式,依次退化
178187
browse_button: 'pickfiles', // 上传选择的点选按钮,**必需**
179188
// 在初始化时,uptoken, uptoken_url, uptoken_func 三个参数中必须有一个被设置
@@ -189,8 +198,8 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
189198
// downtoken_url: '/downtoken',
190199
// Ajax请求downToken的Url,私有空间时使用,JS-SDK 将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址
191200
// unique_names: true, // 默认 false,key 为文件名。若开启该选项,JS-SDK 会为每个文件自动生成key(文件名)
192-
// save_key: true, // 默认 false。若在服务端生成 uptoken 的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理
193-
domain: '<Your bucket domain>', // bucket 域名,下载资源时用到,**必需**
201+
// save_key: true, // 默认 false。若在服务端生成 uptoken 的上传策略中指定了 `save_key`,则开启,SDK在前端将不对key进行任何处理
202+
domain: '<Your bucket domain>', // bucket 域名,下载资源时用到,如:'http://xxx.bkt.clouddn.com/' **必需**
194203
container: 'container', // 上传区域 DOM ID,默认是 browser_button 的父元素,
195204
max_file_size: '100mb', // 最大文件体积限制
196205
flash_swf_url: 'path/of/plupload/Moxie.swf', //引入 flash,相对路径
@@ -226,15 +235,15 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
226235
},
227236
'FileUploaded': function(up, file, info) {
228237
// 每个文件上传成功后,处理相关的事情
229-
// 其中 info 是文件上传成功后,服务端返回的json,形式如
238+
// 其中 info.response 是文件上传成功后,服务端返回的json,形式如
230239
// {
231240
// "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
232241
// "key": "gogopher.jpg"
233242
// }
234243
// 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html
235244
236245
// var domain = up.getOption('domain');
237-
// var res = parseJSON(info);
246+
// var res = parseJSON(info.response);
238247
// var sourceLink = domain + res.key; 获取上传成功后的文件的Url
239248
},
240249
'Error': function(up, err, errTip) {
@@ -322,7 +331,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
322331
323332
```
324333
325-
具体水印参数解释见[水印(watermark)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/watermark.html)
334+
具体水印参数解释见[水印(watermark)](https://developer.qiniu.com/dora/api/image-watermarking-processing-watermark)
326335
327336
- imageView2
328337
@@ -337,7 +346,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
337346
}, key);
338347
339348
```
340-
具体缩略参数解释见[图片处理(imageView2)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imageview2.html)
349+
具体缩略参数解释见[图片基本处理(imageView2)](https://developer.qiniu.com/dora/api/basic-processing-images-imageview2)
341350
342351
- imageMogr2
343352
@@ -357,14 +366,14 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
357366
358367
```
359368
360-
具体高级图像处理参数解释见[高级图像处理(imageMogr2)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imagemogr2.html)
369+
具体高级图像处理参数解释见[图像高级处理(imageMogr2)](https://developer.qiniu.com/dora/api/the-advanced-treatment-of-images-imagemogr2)
361370
362371
- imageInfo
363372
364373
```JavaScript
365374
var imageInfoObj = Qiniu.imageInfo(key);
366375
```
367-
具体 imageInfo 解释见[图片基本信息(imageInfo)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/imageinfo.html)
376+
具体 imageInfo 解释见[图片基本信息(imageInfo)](https://developer.qiniu.com/dora/api/pictures-basic-information-imageinfo)
368377
369378
Ajax跨域限制,IE系列此函数只支持IE10+
370379
@@ -374,7 +383,7 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
374383
var exifOjb = Qiniu.exif(key);
375384
```
376385
377-
具体 exif 解释见[图片EXIF信息(exif)](http://developer.qiniu.com/docs/v6/api/reference/fop/image/exif.html)
386+
具体 exif 解释见[图片EXIF信息(exif)](https://developer.qiniu.com/dora/api/photo-exif-information-exif)
378387
379388
Ajax跨域限制,IE系列此函数只支持IE10+
380389
@@ -444,30 +453,30 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
444453
445454
```
446455
447-
具体管道操作解释见[管道操作](http://developer.qiniu.com/docs/v6/api/overview/fop/pipeline.html)
456+
具体管道操作解释见[管道操作](https://developer.qiniu.com/dora/manual/processing-mechanism)
448457
449458
<a id="demo"></a>
450459
### 运行示例
451460
452-
1. 进入项目根目录,执行 `make install` 安装依赖第三方库
461+
1. 进入项目根目录,执行 `make install` 或 `npm install & bower install` 安装依赖第三方库
453462
2. 进入 `demo` 目录,按照目录下的 `config.example` 示例,创建 `config.js` 文件,其中,`Access Key` 和 `Secret Key` 按如下方式获取
454463
455464
* [开通七牛开发者帐号](https://portal.qiniu.com/signup)
456-
* [登录七牛开发者自助平台,查看 AccessKey 和 SecretKey](https://portal.qiniu.com/setting/key) 。
465+
* [登录七牛开发者自助平台,查看 AccessKey 和 SecretKey](https://portal.qiniu.com/user/key) 。
457466
458467
```javascript
459468
460469
module.exports = {
461-
'ACCESS_KEY': '<Your Access Key>',
462-
'SECRET_KEY': '<Your Secret Key>',
463-
'Bucket_Name': '<Your Bucket Name>',
470+
'AccessKey': '<Your Access Key>',
471+
'SecretKey': '<Your Secret Key>',
472+
'Bucket': '<Your Bucket Name>',
464473
'Port': 19110,
465-
'Uptoken_Url': '<Your Uptoken_Url>', // demo 启动后会在本地 /uptoken 上提供获取 uptoken 的接口,所以这里可以填 'uptoken'
466-
'Domain': '<Your Bucket Domain>'
474+
'UptokenUrl': '<Your Uptoken_Url>', // demo 启动后会在本地 /uptoken 上提供获取 uptoken 的接口,所以这里可以填 'uptoken'
475+
'Domain': '<Your Bucket Domain>' // Bucket 的外链默认域名,在 Bucket 的内容管理里查看,如:'http://xxx.bkt.clouddn.com/'
467476
}
468477
469478
```
470-
3. 进入项目根目录,执行 `make dev` 访问 `http://127.0.0.1:19110/` 或 `http://localhost:19110/`
479+
3. 进入项目根目录,执行 `make dev` 或 `node demo/server.js` 访问命令行打印出的 demo 地址。
471480
472481
<a id="note"></a>
473482
### 说明
@@ -476,14 +485,14 @@ Qiniu-JavaScript-SDK 的示例 Demo 中的服务器端部分是基于[ Node.js
476485
477486
2. JS-SDK 依赖 uptoken,可以直接设置 `uptoken` 、通过提供 Ajax 请求地址 `uptoken_url` 或者通过提供一个能够返回 uptoken 的函数 `uptoken_func` 实现。
478487
479-
3. 如果您想了解更多七牛的上传策略,建议您仔细阅读 [七牛官方文档-上传](http://developer.qiniu.com/code/v6/api/kodo-api/index.html#up)。
488+
3. 如果您想了解更多七牛的上传策略,建议您仔细阅读 [七牛官方文档-上传](https://developer.qiniu.com/kodo/manual/upload-types)。
480489
另外,七牛的上传策略是在后端服务指定的,JS-SDK 的 setOption API 只是设置 Plupload 的初始化参数,和上传策略无关。
481490
482-
4. 如果您想了解更多七牛的图片处理,建议您仔细阅读 [七牛官方文档-图片处理](http://developer.qiniu.com/code/v6/api/kodo-api/index.html#image)
491+
4. 如果您想了解更多七牛的图片处理,建议您仔细阅读 [七牛官方文档-图片处理](https://developer.qiniu.com/dora/api/image-processing-api)
483492
484493
5. 如果是 https 网站,上传地址为 https://up.qbox.me 否则使用 http://upload.qiniu.com
485494
486-
6. JS-SDK 示例生成 uptotken 时,指定的 `Bucket Name` 为公开空间,所以可以公开访问上传成功后的资源。若您生成 uptoken 时,指定的 `Bucket Name` 为私有空间,那您还需要在服务端进行额外的处理才能访问您上传的资源。具体参见[下载凭证](http://developer.qiniu.com/article/developer/security/download-token.html)。JS-SDK 数据处理部分功能不适用于私有空间。
495+
6. JS-SDK 示例生成 uptotken 时,指定的 `Bucket Name` 为公开空间,所以可以公开访问上传成功后的资源。若您生成 uptoken 时,指定的 `Bucket Name` 为私有空间,那您还需要在服务端进行额外的处理才能访问您上传的资源。具体参见[下载凭证](https://developer.qiniu.com/kodo/manual/download-token)。JS-SDK 数据处理部分功能不适用于私有空间。
487496
488497
<a id="faq"></a>
489498
### 常见问题
@@ -781,7 +790,7 @@ $(function() {
781790

782791
<a class="btn btn-default btn-lg " id="up_load" style="width:160px" href="#" >
783792
<span>确认上传</span>
784-
</a>
793+
</a>
785794

786795
<a class="btn btn-default btn-lg " id="stop_load" style="width:160px" href="#" >
787796
<span>暂停上传</span>
@@ -796,7 +805,7 @@ $(function() {
796805

797806
<a class="btn btn-default btn-lg " id="up_load2" style="width:160px" href="#" >
798807
<span>确认上传</span>
799-
</a>
808+
</a>
800809

801810
<a class="btn btn-default btn-lg " id="stop_load2" style="width:160px" href="#" >
802811
<span>暂停上传</span>
@@ -822,8 +831,6 @@ $(function() {
822831
<a id="license"></a>
823832
### 许可证
824833
825-
> Copyright (c) 2014 qiniu.com
826-
827-
### 基于 GPL V2 协议发布:
834+
> Copyright (c) 2017 qiniu.com
828835
829-
> [www.gnu.org/licenses/gpl-2.0.html](http://www.gnu.org/licenses/gpl-2.0.html)
836+
### 基于 MIT 协议发布

bower.json

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
{
22
"name": "qiniu",
33
"description": "Javascript SDK for Qiniu Resource (Cloud) Storage API",
4-
"version": "v1.0.14-beta",
4+
"version": "v1.0.21",
55
"main": "dist/qiniu.js",
6-
"moduleType": ["globals"],
7-
"license": "GPL V2",
6+
"moduleType": [
7+
"globals"
8+
],
9+
"license": "MIT",
810
"ignore": [
911
"**/.*",
1012
"node_modules",
@@ -20,29 +22,30 @@
2022
"upload"
2123
],
2224
"authors": "[email protected]",
23-
"contributors": [
24-
{
25-
"name": "codedogfish",
26-
"email": "[email protected]"
27-
},
28-
{
29-
"name": "dengchenhua",
30-
"email": "[email protected]"
31-
}
32-
],
25+
"contributors": [{
26+
"name": "luoyeshu0507",
27+
"email": "[email protected]"
28+
}, {
29+
"name": "codedogfish",
30+
"email": "[email protected]"
31+
}, {
32+
"name": "jinxinxin",
33+
"email": "[email protected]"
34+
}],
3335
"homepage": "https://github.com/qiniu/js-sdk",
3436
"repository": {
3537
"type": "git",
3638
"url": "git://github.com/qiniu/js-sdk.git"
3739
},
3840
"dependencies": {
39-
"plupload": "=2.1.1"
41+
"plupload": "~2.3.1"
4042
},
4143
"devDependencies": {
4244
"bootstrap": "~3.3.6",
4345
"highlight": "~8.9.1",
4446
"jquery": "~1.9.1",
45-
"respond": "~1.4.2"
47+
"respond": "~1.4.2",
48+
"vue": "^2.2.1"
4649
},
4750
"private": false
4851
}

demo/config.js.example

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module.exports = {
2-
'ACCESS_KEY': '<Your Access Key>',
3-
'SECRET_KEY': '<Your Secret Key>',
4-
'Bucket_Name': '<Your Bucket Name>',
2+
'AccessKey': '<Your Access Key>', // https://portal.qiniu.com/user/key
3+
'SecretKey': '<Your Secret Key>',
4+
'Bucket': '<Your Bucket Name>',
55
'Port': 19110,
6-
'Uptoken_Url': 'uptoken',
7-
'Domain': 'http://qiniu-plupload.qiniudn.com/'
6+
'UptokenUrl': 'uptoken',
7+
'Domain': '<Your Bucket Name>' // bucket domain eg:http://qiniu-plupload.qiniudn.com/
88
};

demo/scripts/formdata.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// jQuery zepto vue angular 等库皆有 progress 的实现 以jQuery为例:
2+
$(function(){
3+
var $key = $('#key'); // file name eg: the file is image.jpg,but $key='a.jpg', you will upload the file named 'a.jpg'
4+
var $userfile = $('#userfile'); // the file you selected
5+
6+
// upload info
7+
var $selectedFile = $('.selected-file');
8+
var $progress = $(".progress");
9+
var $uploadedResult = $('.uploaded-result');
10+
11+
$("#userfile").change(function() { // you can ues 'onchange' here to uplpad automatically after select a file
12+
$uploadedResult.html('');
13+
var selectedFile = $userfile.val();
14+
if (selectedFile) {
15+
// randomly generate the final file name
16+
var ramdomName = Math.random().toString(36).substr(2) + $userfile.val().match(/\.?[^.\/]+$/);
17+
$key.val(ramdomName);
18+
$selectedFile.html('文件:' + selectedFile);
19+
} else {
20+
return false;
21+
}
22+
var f = new FormData(document.getElementById("testform"));
23+
$.ajax({
24+
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.
25+
type: 'POST',
26+
data: f,
27+
processData: false,
28+
contentType: false,
29+
xhr: function(){
30+
myXhr = $.ajaxSettings.xhr();
31+
if(myXhr.upload){
32+
myXhr.upload.addEventListener('progress',function(e) {
33+
// console.log(e);
34+
if (e.lengthComputable) {
35+
var percent = e.loaded/e.total*100;
36+
$progress.html('上传:' + e.loaded + "/" + e.total+" bytes. " + percent.toFixed(2) + "%");
37+
}
38+
}, false);
39+
}
40+
return myXhr;
41+
},
42+
success: function(res) {
43+
console.log("成功:" + JSON.stringify(res));
44+
var str = '<span>已上传:' + res.key + '</span>';
45+
if (res.key && res.key.match(/\.(jpg|jpeg|png|gif)$/)) {
46+
str += '<img src="' + domain + res.key + '"/>';
47+
}
48+
$uploadedResult.html(str);
49+
},
50+
error: function(res) {
51+
console.log("失败:" + JSON.stringify(res));
52+
$uploadedResult.html('上传失败:' + res.responseText);
53+
}
54+
});
55+
return false;
56+
});
57+
});

0 commit comments

Comments
 (0)