| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import dayjs from 'dayjs';
- import path from 'path';
- import resSend from '../util/resSend.js';
- import { isImageFile } from '../middleware/fileUpload.js';
- import { compressImage } from '../util/imageCompressor.js';
- const file = {
- upload: async (req: any, res: any, MyModel: any) => {
- if (!req.file) return resSend(res, 404, '请选择要上传的文件');
- const { isDb, type: myType } = req.body;
- const upPath = req.query.upPath || 'default';
- const file = req.file;
- const isImage = isImageFile(file.mimetype);
- const fileSize = file.size;
- let message = '文件上传成功';
- let result: any = {
- originalName: file.originalname,
- originalUrl: `/uploads/${upPath}/${path.basename(file.path)}`,
- size: file.size,
- compressedUrl: '',
- };
- // 如果是图片且大于500KB,进行压缩
- if (isImage && fileSize > 500 * 1024) {
- const compressedFilename = 'compressed-' + path.basename(file.filename);
- const compressedPath = path.join(path.dirname(file.path), compressedFilename);
- const compressionResult = await compressImage(file.path, compressedPath);
- if (compressionResult.success) {
- result.compressedUrl = `/uploads/${upPath}/${compressedFilename}`;
- result.compressedSize = compressionResult.finalSize;
- message = `文件上传成功,图片已从${(fileSize / 1024).toFixed(2)}KB压缩至${(
- (compressionResult.finalSize || 0) / 1024
- ).toFixed(2)}KB`;
- } else {
- message = '文件上传成功,但图片压缩失败,仅返回原图';
- }
- }
- // 如果需要存储到数据库
- if (isDb === 'true') {
- const fileRecord = new MyModel({
- ...result,
- filename: path.basename(file.filename),
- mimetype: file.mimetype,
- type: myType || 'other',
- updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
- });
- await fileRecord.save();
- result._id = fileRecord._id;
- result.type = fileRecord.type;
- result.updateTime = fileRecord.updateTime;
- }
- // 记录API描述(根据您之前的代码风格)
- req.apiDescription = `文件上传-${file.originalname}`;
- return resSend(res, 0, message, result);
- },
- };
- export default file;
|