|
|
@@ -12,6 +12,7 @@ const errData = {
|
|
|
msg :'请求失败,请联系管理员',
|
|
|
code:999
|
|
|
}
|
|
|
+const sharp = require('sharp'); // 确保安装:npm install sharp
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -155,7 +156,7 @@ class UtilsController extends Controller {
|
|
|
|
|
|
}
|
|
|
|
|
|
- readFileImageForPath(filePath){
|
|
|
+ async readFileImageForPath(filePath,maxWidth=1500){
|
|
|
|
|
|
const getMimeType = (fileName)=>{
|
|
|
const extension = path.extname(fileName).toLowerCase().replace('.', '');
|
|
|
@@ -184,19 +185,32 @@ class UtilsController extends Controller {
|
|
|
return mimeType;
|
|
|
}
|
|
|
|
|
|
- const fileBuffer = fs.readFileSync(filePath);
|
|
|
+ try {
|
|
|
+ const fileName = path.basename(filePath);
|
|
|
+ const image = sharp(filePath);
|
|
|
+ const metadata = await image.metadata();
|
|
|
|
|
|
+ let mimeType = getMimeType(fileName); // 调用下面定义的私有方法获取 MIME 类型
|
|
|
|
|
|
- const fileName = path.basename(filePath);
|
|
|
- const mimeType = getMimeType(fileName); // 自定义获取 MIME 类型的方法
|
|
|
- return {
|
|
|
- fileBuffer:fileBuffer,
|
|
|
- fileName:fileName,
|
|
|
- mimeType:mimeType,
|
|
|
- };
|
|
|
+ let fileBuffer;
|
|
|
|
|
|
+ if (metadata.width > maxWidth) {
|
|
|
+ // 如果宽度大于 1500px,压缩至 1500px 宽度,保持比例
|
|
|
+ fileBuffer = await image.resize(maxWidth).toBuffer();
|
|
|
+ } else {
|
|
|
+ // 否则直接读取原图
|
|
|
+ fileBuffer = fs.readFileSync(filePath);
|
|
|
+ }
|
|
|
|
|
|
- return new File([fileBuffer], fileName, { type: mimeType });
|
|
|
+ return {
|
|
|
+ fileBuffer,
|
|
|
+ fileName,
|
|
|
+ mimeType
|
|
|
+ };
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error processing image:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|