Skip to content

Commit 4d769be

Browse files
author
pedro
committed
feat:添加文件上传的业务
1 parent 0f1b4cc commit 4d769be

6 files changed

Lines changed: 39 additions & 8 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ suspect/
1414
.vscode/
1515
dist
1616
learn
17-
tokens.json
17+
tokens.json
18+
app/assets

app/api/cms/file.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
'use strict';
22

33
const { LinRouter } = require('lin-mizar');
4+
const { LocalUploader } = require('../../extensions/file/local-uploader');
45

56
const file = new LinRouter({
67
prefix: '/cms/file'
78
});
89

9-
file.get('/', async ctx => {
10-
ctx.type = 'html';
11-
ctx.body = 'file';
10+
file.post('/', async ctx => {
11+
const files = await ctx.multipart();
12+
const uploader = new LocalUploader('app/assets');
13+
await uploader.upload(files);
14+
ctx.success();
1215
});
1316

1417
module.exports = { file };

app/app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@ async function createApp () {
3131
applyBodyParse(app);
3232
applyCors(app);
3333
config.initApp(app);
34-
const { log, error, Lin } = require('lin-mizar');
34+
const { log, error, Lin, multipart } = require('lin-mizar');
3535
app.use(log);
3636
app.on('error', error);
3737
const lin = new Lin();
3838
await lin.initApp(app, true, true, null, null, null);
3939
indexPage(app);
40+
multipart(app);
4041
return app;
4142
}
4243

app/extensions/file/config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
'use strict';
2+
3+
module.exports = {
4+
file_store_dir: 'assets'
5+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const { Uploader } = require('lin-mizar/lin/file');
2+
const fs = require('fs');
3+
4+
class LocalUploader extends Uploader {
5+
/**
6+
* 处理文件流
7+
* @param {object[]} files 文件流数组
8+
*/
9+
async upload (files) {
10+
for (const stream of files) {
11+
const filepath = this.getStorePath(stream.filename);
12+
const target = fs.createWriteStream(filepath);
13+
await stream.pipe(target);
14+
}
15+
}
16+
}
17+
18+
module.exports = { LocalUploader };

app/starter.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
'use strict';
22

33
const { config } = require('lin-mizar/lin/config');
4+
const fs = require('fs');
45

56
// 1. 必须最开始加载配置,因为其他很多扩展依赖于配置
67
function applyConfig () {
7-
// TODO: 自动加载app/config下的所有配置文件
8-
config.getConfigFromFile('app/config/setting.js');
9-
config.getConfigFromFile('app/config/secure.js');
8+
const cwd = process.cwd();
9+
const files = fs.readdirSync(`${cwd}/app/config`);
10+
for (const file of files) {
11+
config.getConfigFromFile(`app/config/${file}`);
12+
}
1013
}
1114

1215
const run = async () => {

0 commit comments

Comments
 (0)