Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add router and config
  • Loading branch information
andycall committed Feb 20, 2017
1 parent 8baf729 commit 39c4e20
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 58 deletions.
66 changes: 9 additions & 57 deletions app.js
@@ -1,68 +1,18 @@
import Koa from 'koa'
import parse from 'co-busboy'
import logger from 'koa-logger'
import path from 'path'
import fs from 'fs'
import router from 'koa-route'

import upload from './upload'
import md5 from './md5'

const app = new Koa()
const outputDir = path.join(__dirname, 'receive');

app.use(logger());

app.use(function* (next) {
// ignore non-POSTs
if ('POST' != this.method) return yield next;

// multipart upload
var parts = parse(this);
var part;

while ((part = yield parts)) {
if (part.constructor.name === 'FileStream') {
let filename = part.filename;
let chunkIndex, prefix;

if (filename.indexOf('_IDSPLIT_') > 0) {
prefix = filename.split('_IDSPLIT_')[0];
chunkIndex = filename.split('_IDSPLIT_')[1];

// // // 错误处理测试使用
if (chunkIndex == 1) {
// console.log(`set failed of ${chunkIndex}`);
// this.status = 500;
}
}
else {
prefix = filename;
chunkIndex = '0';
}

let fileDir = path.join(outputDir, prefix)

if (!fs.existsSync(fileDir)) {
fs.mkdirSync(fileDir);
}

var stream = fs.createWriteStream(path.join(fileDir, chunkIndex));
part.pipe(stream);
console.log('uploading %s -> %s', part.filename, stream.path);
}
else {
let param = part[0];
let value = part[1];
console.log(`${param} : ${value}`);
}
}

this.body = {
error: 0,
errmsg: 'ok'
}
});

// response
app.use(async (ctx) => {
ctx.body = `<!DOCTYPE html>
app.use(router.get('/', function* () {
this.body = `<!DOCTYPE html>
<html>
<head>
<title></title>
Expand All @@ -74,7 +24,9 @@ app.use(async (ctx) => {
</form>
</body>
</html>`
})
}));
app.use(router.post('/upload', upload));
app.use(router.post('/md5', md5));

app.listen(3000, () => console.log('server started 3000'))

Expand Down
39 changes: 39 additions & 0 deletions md5.js
@@ -0,0 +1,39 @@
import fs from 'fs'
import parse from 'co-body'
import path from 'path'
import crypto from 'crypto'

const receiveRootDir = path.join(__dirname, 'receive');

function toMd5(buffer) {
let md5 = crypto.createHash('md5');
md5.update(buffer);
return md5.digest('hex');
}

module.exports = function* () {
var body = yield parse(this, {
limit: '1kb'
});

let filename = body.filename;
let fileDir = path.join(receiveRootDir, filename);

let totalBuffer = Buffer.alloc(0);
let dirInfo = fs.readdirSync(fileDir);

dirInfo = dirInfo.sort(function(pre, next) {
return pre - next;
});

dirInfo.forEach(name => {
let chunkPath = path.join(fileDir, name);
let buffer = fs.readFileSync(chunkPath);
totalBuffer = Buffer.concat([totalBuffer, buffer], totalBuffer.length + buffer.length);
})

this.body = {
error: 0,
data: toMd5(totalBuffer)
}
}
4 changes: 3 additions & 1 deletion package.json
Expand Up @@ -24,9 +24,11 @@
},
"homepage": "https://github.com/geekplux/koa2-boilerplate#readme",
"dependencies": {
"co-body": "^4.2.0",
"co-busboy": "^1.3.1",
"koa": "^2.0.0-alpha.3",
"koa-logger": "^1.3.1"
"koa-logger": "^1.3.1",
"koa-route": "^2.4.2"
},
"devDependencies": {
"babel-plugin-syntax-async-functions": "^6.8.0",
Expand Down
56 changes: 56 additions & 0 deletions upload.js
@@ -0,0 +1,56 @@
import parse from 'co-busboy'
import path from 'path'
import fs from 'fs'

const outputDir = path.join(__dirname, 'receive');

module.exports = function* () {
// ignore non-POSTs
if ('POST' != this.method) return yield next;

// multipart upload
var parts = parse(this);
var part;

while ((part = yield parts)) {
if (part.constructor.name === 'FileStream') {
let filename = part.filename;
let chunkIndex, prefix;

if (filename.indexOf('_IDSPLIT_') > 0) {
prefix = filename.split('_IDSPLIT_')[0];
chunkIndex = filename.split('_IDSPLIT_')[1];

// // // 错误处理测试使用
if (chunkIndex == 1) {
// console.log(`set failed of ${chunkIndex}`);
// this.status = 500;
}
}
else {
prefix = filename;
chunkIndex = '0';
}

let fileDir = path.join(outputDir, prefix)

if (!fs.existsSync(fileDir)) {
fs.mkdirSync(fileDir);
}

var stream = fs.createWriteStream(path.join(fileDir, chunkIndex));
part.pipe(stream);
console.log('uploading %s -> %s', part.filename, stream.path);
}
else {
let param = part[0];
let value = part[1];
console.log(`${param} : ${value}`);
}
}

this.body = {
error: 0,
errmsg: 'ok'
}
}

0 comments on commit 39c4e20

Please sign in to comment.