Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
install : all

all :
grunt
node demo/server.js
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ qiniu-js-sdk
var uploader = Qiniu.uploader({
runtimes: 'html5,flash,html4', //上传模式,依次退化
browse_button: 'pickfiles', //上传选择的点选按钮,**必需**
uptoken_url: '/token', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供)
uptoken_url: '/uptoken', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供)
// downtoken_url: '/downtoken',
// Ajax请求downToken的Url,私有空间时使用,JS-SDK将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址
// uptoken : '<Your upload token>', //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成
// unique_names: true, // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名)
// save_key: true, // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理
Expand Down Expand Up @@ -301,6 +303,8 @@ qiniu-js-sdk

* 安装 [Nodejs](http://nodejs.org/download/)、[npm](https://www.npmjs.org/)

* `npm install -g grunt-cli`,安装 Grunt

* `npm install`,安装七牛 Node.js SDK、Express

* 获取源代码:
Expand All @@ -316,12 +320,15 @@ qiniu-js-sdk
'ACCESS_KEY': '<Your Access Key>',
'SECRET_KEY': '<Your Secret Key>',
'Bucket_Name': '<Your Bucket Name>',
'Port': 18080
'Port': 18080,
'Uptoken_Url': '<Your Uptoken_Url>',
'Domain': '<Your Bucket Domain>'
}

```

* 在`demo`目录运行`node server.js` 或者 在根目录运行`make`启动
* 在根目录运行`make`启动

* 访问`http://127.0.0.1:18080/`或`http://localhost:18080/`

## 说明
Expand Down
4 changes: 2 additions & 2 deletions demo/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ module.exports = {
'SECRET_KEY': '<Your Secret Key>',
'Bucket_Name': '<Your Bucket Name>',
'Port': 18080,
'Uptoken_Url': '/token',
'Uptoken_Url': '/uptoken',
'Domain': 'http://qiniu-plupload.qiniudn.com/'
}
};
2 changes: 2 additions & 0 deletions demo/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/*global FileProgress */
/*global hljs */


$(function() {
var uploader = Qiniu.uploader({
runtimes: 'html5,flash,html4',
Expand All @@ -15,6 +16,7 @@ $(function() {
chunk_size: '4mb',
uptoken_url: $('#uptoken_url').val(),
domain: $('#domain').val(),
// downtoken_url: '/downtoken',
// unique_names: true,
// save_key: true,
// x_vars: {
Expand Down
25 changes: 17 additions & 8 deletions demo/js/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,18 @@ FileProgress.prototype.setComplete = function(up, info) {
var td = this.fileProgressWrapper.find('td:eq(2) .progress');

var res = $.parseJSON(info);
var domain = up.getOption('domain');
var url = domain + encodeURI(res.key);
var link = domain + res.key;
var str = "<div><strong>Link:</strong><a href=" + url + " target='_blank' > " + link + "</a></div>" +
"<div class=hash><strong>Hash:</strong>" + res.hash + "</div>";
var url;
if (res.url) {
url = res.url;
str = "<div><strong>Link:</strong><a href=" + res.url + " target='_blank' > " + res.url + "</a></div>" +
"<div class=hash><strong>Hash:</strong>" + res.hash + "</div>";
} else {
var domain = up.getOption('domain');
url = domain + encodeURI(res.key);
var link = domain + res.key;
str = "<div><strong>Link:</strong><a href=" + url + " target='_blank' > " + link + "</a></div>" +
"<div class=hash><strong>Hash:</strong>" + res.hash + "</div>";
}

td.html(str).removeClass().next().next('.status').hide();

Expand Down Expand Up @@ -240,12 +247,14 @@ FileProgress.prototype.setComplete = function(up, info) {
Wrapper.append(imgWrapper);

var img = new Image();
$(img).attr('src', url + imageView);
if (!/imageView/.test(url)) {
url += imageView
}
$(img).attr('src', url);

var height_space = 340;
$(img).on('load', function() {

showImg.attr('src', url + imageView);
showImg.attr('src', url);

linkWrapper.attr('href', url).attr('title', '查看原图');

Expand Down
47 changes: 40 additions & 7 deletions demo/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,13 @@ app.configure(function() {
app.use(express.static(__dirname + '/'));
});


app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

app.use(express.urlencoded());

app.use(function(req, res, next) {
req.headers['if-none-match'] = 'no-match-for-this';
next();
});

app.get('/token', function(req, res, next) {
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");
Expand All @@ -28,6 +25,40 @@ app.get('/token', function(req, res, next) {
}
});

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
})
}
});

app.get('/', function(req, res) {
res.render('index.html', {
domain: config.Domain,
Expand All @@ -41,4 +72,6 @@ qiniu.conf.SECRET_KEY = config.SECRET_KEY;
var uptoken = new qiniu.rs.PutPolicy(config.Bucket_Name);


app.listen(config.Port);
app.listen(config.Port, function() {
console.log('Listening on port %d', config.Port);
});
2 changes: 1 addition & 1 deletion demo/views/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ <h1 class="text-left col-md-12 ">
<a class="btn btn-default view_code" id="show_code">
查看初始化代码
</a>
<a class="btn btn-default view_github" href="https://github.com/sunln/qiniu-js-sdk" target="_blank">
<a class="btn btn-default view_github" href="https://github.com/qiniupd/qiniu-js-sdk" target="_blank">
<img src="http://qtestbucket.qiniudn.com/GitHub-Mark-32px.png">
View Source on Github
</a>
Expand Down
49 changes: 40 additions & 9 deletions src/qiniu.js
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ function QiniuJsSDK() {
errorObj = that.parseJSON(errorObj.error);
errorText = errorObj.error || 'file exists';
} catch (e) {
// console.log(e);
throw ('invalid json format');
}
break;
case 631:
Expand Down Expand Up @@ -493,6 +493,42 @@ function QiniuJsSDK() {

uploader.bind('FileUploaded', (function(_FileUploaded_Handler) {
return function(up, file, info) {

var last_step = function(up, file, info) {
if (op.downtoken_url) {
var ajax_downtoken = that.createAjax();
ajax_downtoken.open('POST', op.downtoken_url, true);
ajax_downtoken.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
ajax_downtoken.onreadystatechange = function() {
if (ajax_downtoken.readyState === 4) {
if (ajax_downtoken.status === 200) {
var res_downtoken;
try {
res_downtoken = that.parseJSON(ajax_downtoken.responseText);
} catch (e) {
throw ('invalid json format');
}
var info_extended = {};
plupload.extend(info_extended, that.parseJSON(info), res_downtoken);
if (_FileUploaded_Handler) {
_FileUploaded_Handler(up, file, JSON.stringify(info_extended));
}
} else {
uploader.trigger('Error', {
status: ajax_downtoken.status,
response: ajax_downtoken.responseText,
file: file,
code: plupload.HTTP_ERROR
});
}
}
};
ajax_downtoken.send('key=' + that.parseJSON(info).key + '&domain=' + op.domain);
} else if (_FileUploaded_Handler) {
_FileUploaded_Handler(up, file, info);
}
};

var res = that.parseJSON(info.response);
ctx = ctx ? ctx : res.ctx;
if (ctx) {
Expand Down Expand Up @@ -523,15 +559,11 @@ function QiniuJsSDK() {
ajax.open('POST', url, true);
ajax.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
ajax.setRequestHeader('Authorization', 'UpToken ' + that.token);
ajax.send(ctx);
ajax.onreadystatechange = function() {
if (ajax.readyState === 4) {
if (ajax.status === 200) {
var info = ajax.responseText;

if (_FileUploaded_Handler) {
_FileUploaded_Handler(up, file, info);
}
last_step(up, file, info);

} else {
uploader.trigger('Error', {
Expand All @@ -543,10 +575,9 @@ function QiniuJsSDK() {
}
}
};
ajax.send(ctx);
} else {
if (_FileUploaded_Handler) {
_FileUploaded_Handler(up, file, info.response);
}
last_step(up, file, info.response);
}

};
Expand Down
Loading