You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
6.0 KiB
198 lines
6.0 KiB
/**
|
|
* Created by Marlon on 15-12-25.
|
|
*/
|
|
const http = require('http');
|
|
const querystring = require('querystring');
|
|
const url = require('url');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const formidable = require('formidable');
|
|
const KS3 = require('ks3');
|
|
const auth = require('ks3/lib/auth');
|
|
const util = require('ks3/lib/util');
|
|
|
|
const ROOT = '/Users/web/ks3-js/sdk/demo';
|
|
const hostname = '127.0.0.1';
|
|
const port = 3000;
|
|
const AK = 'your Access Key'; //replace with your AK
|
|
const SK = 'your secret key'; // your secret key (SK)
|
|
|
|
var responseHeader = {
|
|
"Access-Control-Allow-Origin": "*",
|
|
"Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS",
|
|
"Access-Control-Allow-Headers": "Authorization,kss-async-process,kss-notifyurl,x-kss-storage-class"
|
|
};
|
|
|
|
function get(req, res) {
|
|
var pathname = url.parse(req.url).pathname;
|
|
fs.readFile(path.join(ROOT, pathname), function (err, file) {
|
|
if (err) {
|
|
res.writeHead(404);
|
|
res.end('找不到相关文件。 - -');
|
|
return;
|
|
}
|
|
res.writeHead(200);
|
|
res.end(file);
|
|
});
|
|
}
|
|
|
|
function hasBody(req) {
|
|
return 'transfer-encoding' in req.headers || ('content-length' in req.headers && req.headers['content-length'] !== '0');
|
|
}
|
|
|
|
|
|
function mime(req) {
|
|
var str = req.headers['content-type'] || '';
|
|
return str.split(';')[0];
|
|
}
|
|
|
|
|
|
//POST请求 处理函数
|
|
function handle(req, res) {
|
|
//TODO: not implemented
|
|
}
|
|
|
|
function post(req, res) {
|
|
if (hasBody(req)) {
|
|
|
|
var buffers = [];
|
|
req.on('data', function (chunk) {
|
|
buffers.push(chunk);
|
|
}).on('end', function () {
|
|
req.rawBody = Buffer.concat(buffers).toString();
|
|
console.log('postData: ' + req.rawBody);
|
|
|
|
|
|
if (mime(req) === 'application/json') {
|
|
try {
|
|
req.body = JSON.parse(req.rawBody);
|
|
handle(req, res);
|
|
} catch (e) {
|
|
res.writeHead(400);
|
|
req.end('Invalid JSON');
|
|
return;
|
|
}
|
|
} else if (mime(req) === 'application/xml') {
|
|
}
|
|
else if (mime(req) === 'multipart/form-data') {
|
|
}
|
|
});
|
|
} else {
|
|
handle(req, res);
|
|
}
|
|
}
|
|
|
|
function put(req, res) {
|
|
var auth = req.headers['authorization'];
|
|
var async_process = req.headers['kss-async-process'];
|
|
var notifyurl = req.headers['kss-notifyurl'];
|
|
console.log('adp: ' + async_process + '\nnotifyUrl: ' + notifyurl);
|
|
if(auth !== 'KSS ' + AK){
|
|
res.writeHead(403, responseHeader);
|
|
res.end('Authorization not match');
|
|
return;
|
|
}
|
|
if (hasBody(req)) {
|
|
if (mime(req) === 'multipart/form-data') {
|
|
var form = new formidable.IncomingForm();
|
|
form.parse(req, function (err, fields, files) {
|
|
req.body = fields;
|
|
req.files = files; // don't forget to delete all req.files when done
|
|
next(req, res);
|
|
});
|
|
}else{
|
|
res.writeHead(400, responseHeader);
|
|
res.end('mime type not match');
|
|
}
|
|
}else{
|
|
res.writeHead(400, responseHeader);
|
|
res.end('not found body');
|
|
}
|
|
};
|
|
|
|
function next(req, res) {
|
|
var bucketName = url.parse(req.url).pathname.split('/')[1];
|
|
req.query = url.parse(req.url, true).query;
|
|
|
|
var client = new KS3(AK, SK, bucketName);
|
|
var key = req.body.key;
|
|
var filePath = req.files.file.path;
|
|
var outerRes = res;
|
|
client.object.put({
|
|
Bucket: bucketName,
|
|
Key: key,
|
|
filePath: filePath
|
|
},
|
|
function (err, data, res) {
|
|
if (err) {
|
|
console.log("Error in put : " + err.message);
|
|
return;
|
|
}
|
|
console.log(JSON.stringify(res));
|
|
if (res.status === 200 && res.statusCode === 200) {
|
|
outerRes.writeHead(200, responseHeader);
|
|
|
|
//计算处理之后的文件的signature
|
|
var resource = '/' + util.encodeKey('imgWaterMark-' + key);
|
|
var getReq = {
|
|
method: 'GET',
|
|
date: req.query.t,
|
|
uri: 'http://' + bucketName + '.kss.ksyun.com' + resource,
|
|
resource: '/' + bucketName + resource,
|
|
headers: {}
|
|
};
|
|
var signature = auth.generateToken(SK, getReq);
|
|
console.log('signature:' + signature);
|
|
outerRes.end(signature);
|
|
|
|
//下载加过水印的图片到assets目录
|
|
setTimeout(getAdpResult, 2000);
|
|
function getAdpResult() {
|
|
client.object.get({
|
|
Bucket: bucketName,
|
|
Key: 'imgWaterMark-' + key
|
|
}, function (err, data, res, originData) {
|
|
if (err) {
|
|
console.log("Error in get : " + err.message);
|
|
return;
|
|
}
|
|
var newFileName = path.join(__dirname, 'assets/imgWaterMark-' + key);
|
|
fs.writeFileSync(newFileName, originData);
|
|
});
|
|
}
|
|
}
|
|
},
|
|
{
|
|
'kss-async-process': req.headers['kss-async-process'],
|
|
'kss-notifyurl': req.headers['kss-notifyurl'],
|
|
'x-kss-storage-class' : req.headers['x-kss-storage-class']
|
|
});
|
|
}
|
|
|
|
|
|
//启动服务器
|
|
var server = http.createServer(function (req, res) {
|
|
//console.log( req.headers);
|
|
|
|
|
|
switch (req.method) {
|
|
case 'OPTIONS':
|
|
res.writeHead(200, responseHeader);
|
|
res.end();
|
|
/*让options请求快速返回*/
|
|
break;
|
|
case 'POST':
|
|
post(req, res);
|
|
break;
|
|
case 'PUT':
|
|
put(req, res);
|
|
break;
|
|
|
|
case 'GET':
|
|
default :
|
|
get(req, res);
|
|
}
|
|
}).listen(port, hostname, function () {
|
|
console.log('Server running at http://' + hostname + ':' + port + '/');
|
|
});
|
|
|
|
|