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