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:
Etienne Delvarre
2026-05-29 11:49:43 +02:00
parent 751db0c85c
commit c518e01738
2 changed files with 44 additions and 8 deletions
+22 -8
View File
@@ -1349,13 +1349,13 @@ function saveHeroMeta() {
});
})();
function uploadHeroImage(input) {
async function uploadHeroImage(input) {
const file = input.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (e) => {
reader.onload = async (e) => {
const img = new Image();
img.onload = () => {
img.onload = async () => {
const maxW = 1600;
let w = img.width, h = img.height;
if (w > maxW) { h = Math.round(h * maxW / w); w = maxW; }
@@ -1363,11 +1363,25 @@ function uploadHeroImage(input) {
canvas.width = w; canvas.height = h;
canvas.getContext('2d').drawImage(img, 0, 0, w, h);
const dataUrl = canvas.toDataURL('image/jpeg', 0.85);
applyHeroImage(dataUrl);
heroMeta.posY = 50;
applyHeroMeta();
saveVisionSection('hero-image', dataUrl);
saveHeroMeta();
// Upload file to server (too large for NocoDB LongText)
try {
const res = await fetch('/api/hero-upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ dataUrl }),
});
const data = await res.json();
if (data.path) {
applyHeroImage(data.path);
heroMeta.posY = 50;
applyHeroMeta();
saveVisionSection('hero-image', data.path);
saveHeroMeta();
}
} catch (err) {
console.error('Hero upload error:', err);
}
};
img.src = e.target.result;
};