file模式:
1.从request中取得文件的filepath和filename
2.使用fs的readFileSync读取文件
3.使用Buffer将文件转成base64的格式
4.判断是否有目标文件夹,没有就创建
5.判断此文件是否存在,如果存在,删除
6.writeFileSync写入文件
async addHead({ request }) {
const { ctx } = this;
const file = request.files[0];
const data = fs.readFileSync(file.filepath);
const base64str = Buffer.from(data, 'binary').toString('base64');
const bufferData = Buffer.from(base64str, 'base64');
const uplaodBasePath = '../../app/public/upload/';
const dirName = ctx.user.userName + 'HeadImg';
const dir = path.join(__dirname, uplaodBasePath, dirName);
const src = path.join(__dirname, uplaodBasePath, dirName, file.filename);
if (!fs.existsSync(dir)) fs.mkdirSync(dir);
const res = fs.readdirSync(dir);
if (res.length > 0) fs.unlinkSync(path.join(__dirname, uplaodBasePath, dirName, res[0]));
try {
await fs.writeFileSync(src, bufferData);
ctx.body = { name: file.filename };
ctx.status = 200;
this.operationLogger(request, '上传、更新用户头像', true);
} catch (e) {
ctx.body = { msg: '写入图片失败' };
ctx.status = 400;
this.serverError('上传、更新用户头像失败', request, '上传、更新用户头像');
}
}