'use strict'; const Controller = require('egg').Controller; const fs = require('fs'); const { COPYFILE_EXCL } = fs.constants; const respFormat = require('../util/respFormat'); const { randomString, getSuffix, getFilePath } = require('../util/tool'); class FilesController extends Controller { async upload() { const { ctx } = this; console.log(ctx.request.body); console.log('got %d files', ctx.request.files.length); try { const filesResult = []; const rootPath = this.config.uploadBasePath; // 遍历处理多个文件 for (const file of ctx.request.files) { console.log('field: ' + file.fieldname); console.log('filename: ' + file.filename); console.log('encoding: ' + file.encoding); console.log('mime: ' + file.mime); console.log('tmp filepath: ' + file.filepath); const type = ctx.request.body.type; const suff = getSuffix(file.filename); const newFileName = randomString(16) + suff; const filePath = rootPath + getFilePath(type); if (!fs.existsSync()) fs.mkdirSync(filePath); const targetPath = filePath + newFileName; await fs.copyFileSync(file.filepath, targetPath, COPYFILE_EXCL); const item = { filename: file.filename, url: `https://image.dengtongyu.com${targetPath}`, }; filesResult.push(item); } ctx.body = respFormat({ data: filesResult }); await ctx.cleanupRequestFiles(); } finally { // 需要删除临时文件 await ctx.cleanupRequestFiles(); } } } module.exports = FilesController;