feat(pre-matricula): compress uploaded preview images using sharp to JPEG for WhatsApp
Build and Deploy (Gitea) / build-and-deploy (push) Successful in 2m7s Details

This commit is contained in:
Sidney 2026-07-18 21:44:35 -03:00
parent 850ec464c9
commit dd0e587551
1 changed files with 25 additions and 2 deletions

View File

@ -4256,8 +4256,31 @@ async function startServer() {
if (!req.file) { if (!req.file) {
return res.status(400).json({ error: 'Nenhum arquivo enviado.' }); return res.status(400).json({ error: 'Nenhum arquivo enviado.' });
} }
const fileName = `pre_${Date.now()}_${Math.random().toString(36).substring(7)}_${req.file.originalname.replace(/[^a-zA-Z0-9.-]/g, '_')}`;
const url = await uploadFile('prematriculas', fileName, req.file.buffer, req.file.mimetype); let fileBuffer = req.file.buffer;
let contentType = req.file.mimetype;
let fileName = req.file.originalname.replace(/[^a-zA-Z0-9.-]/g, '_');
// Se for uma imagem, compacta usando sharp e converte para JPEG para garantir compatibilidade com WhatsApp
if (contentType.startsWith('image/')) {
try {
fileBuffer = await sharp(req.file.buffer)
.resize(600, 600, { fit: 'inside', withoutEnlargement: true })
.jpeg({ quality: 75, progressive: true })
.toBuffer();
contentType = 'image/jpeg';
// Garante que a extensão seja .jpg no final do nome
const lastDot = fileName.lastIndexOf('.');
const baseName = lastDot !== -1 ? fileName.substring(0, lastDot) : fileName;
fileName = `${baseName}.jpg`;
} catch (sharpError) {
console.warn('[PreMatricula:Upload] Falha ao processar com sharp, enviando original:', sharpError.message);
}
}
const finalFileName = `pre_${Date.now()}_${Math.random().toString(36).substring(7)}_${fileName}`;
const url = await uploadFile('prematriculas', finalFileName, fileBuffer, contentType);
res.json({ url }); res.json({ url });
} catch (e) { } catch (e) {
console.error('[PreMatricula:Upload] Erro de upload:', e); console.error('[PreMatricula:Upload] Erro de upload:', e);