tegg初次尝试以及写一个后端接收文件上传的接口
1.tegg
再一次用脚手架构建egg项目,发现写法全然不同,懵逼了半天才搞懂了这些注解,呸,装饰器的含义,先附上我的学习路径
tegg的github
tegg装饰器详解
首先download下egg项目之后,目录如下
2.写一个文件上传接收的接口,用于前端测试
由于本接口只是用于前端测试,所以文件就直接写入了项目本地,所以要在config里面提前声明项目静态文件存放地址, 打开congfig.default增加以下配置。
bar下面controller下新建file.ts,
代码如下
import { EggLogger, EggAppConfig } from 'egg';
import { Context, EggContext, HTTPController, HTTPMethod, HTTPMethodEnum, Inject } from '@eggjs/tegg';
import { FileService } from '@/module/foo';
import * as fs from 'fs';
import { mkdirp } from 'mkdirp';
import path from 'path';
@HTTPController({
path: '/file',
})
export class file {
@Inject()
logger: EggLogger;
@Inject()
config: EggAppConfig;
@Inject()
fileService: FileService;
@HTTPMethod({
method: HTTPMethodEnum.POST,
path: '/singleFileUpload',
})
async singleFileUpload(@Context() ctx: EggContext) {
const file = ctx.request.files[0];
let uploadDir = '';
try {
const f = fs.readFileSync(file.filepath);
const day = new Date().getFullYear() + '-' + new Date().getMonth();
const dir = path.join(this.config.uploadDir, day);
await mkdirp(dir);
uploadDir = path.join(dir, file.filename);
fs.writeFileSync(uploadDir, f);
const filePath = uploadDir.replaceAll('app\\', '');
return { code: 200, data: { src: filePath } };
} catch (e) {
return { code: 500, msg: e };
} finally {
await ctx.cleanupRequestFiles();
}
}
}
然后,就完了呀。