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:
+22
-8
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user