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.
 
 
 
 
 
 
zhishifufei_php/public/pc/ks3-js-sdk/demo/server.js

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 + '/');
});