Fix hero image persistence: file upload instead of NocoDB base64
NocoDB LongText field has ~95KB limit, hero image is ~456KB base64. New approach: POST /api/hero-upload saves image as file in /public/uploads/, NocoDB stores only the path. Docker volume configured for persistence. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -239,6 +239,28 @@ app.put('/api/contenu/:sceneId', requireAuth, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// ── Hero image upload (file too large for NocoDB LongText) ──
|
||||
const fs = require('fs');
|
||||
|
||||
app.post('/api/hero-upload', requireAuth, (req, res) => {
|
||||
try {
|
||||
const { dataUrl } = req.body;
|
||||
if (!dataUrl || !dataUrl.startsWith('data:image/')) return res.status(400).json({ error: 'Invalid image' });
|
||||
const matches = dataUrl.match(/^data:image\/(\w+);base64,(.+)$/);
|
||||
if (!matches) return res.status(400).json({ error: 'Invalid format' });
|
||||
const ext = matches[1] === 'jpeg' ? 'jpg' : matches[1];
|
||||
const buffer = Buffer.from(matches[2], 'base64');
|
||||
const uploadDir = path.join(__dirname, 'public', 'uploads');
|
||||
if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true });
|
||||
const filename = `hero.${ext}`;
|
||||
fs.writeFileSync(path.join(uploadDir, filename), buffer);
|
||||
const publicPath = `/uploads/${filename}?t=${Date.now()}`;
|
||||
res.json({ path: publicPath });
|
||||
} catch (e) {
|
||||
res.status(500).json({ error: e.message });
|
||||
}
|
||||
});
|
||||
|
||||
// Auth gate — redirect to login page if not authenticated
|
||||
app.get('/', (req, res) => {
|
||||
if (isAuth(req)) {
|
||||
|
||||
Reference in New Issue
Block a user