50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
'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;
|