Disegno Tecnico: un'immagine BMP viene rifiutata e l'errore non si vede #107
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
src/frontend/flask_app/templates/maker/task_editor.html:2418 (uploadTaskFile) accetta solo png/jpeg/webp/pdf, ma l'input (accept="image/*,application/pdf", righe ~860 e ~876) lascia scegliere un .bmp: errorMessage «Formato file non supportato» compare solo nel banner in cima alla pagina (riga 251), fuori vista quando si è scesi al task. Riprodotto 25/10/2026 su daitarn, task 8 ricetta 3, con sider_2_1.bmp (le foto Sider sono BMP). Il backend (src/backend/api/routers/files.py:25) ammette jpeg/png/gif/webp/pdf con controllo dei magic byte. Stesso controllo in templates/maker/recipe_editor.html:690 (uploadFile).
ESITO: richiesta
RIF: gitea:Adriano/TieMeasureFlow#107
COSA: Disegno Tecnico del task (e disegno della ricetta): un'immagine che il browser sa leggere ma il backend non ammette (BMP) si converte in PNG nel browser prima del ritaglio e del caricamento; l'errore di caricamento compare anche dentro il riquadro Disegno Tecnico del task.
BASE: ramo lavoro/daitarn-tmf-107 da
5737655, worktree C:/Users/Adriano/lavoro/TieMeasureFlow-107.MODIFICHE
tmfNeedsPng(type): true setypecomincia con 'image/' e non è fra image/png, image/jpeg, image/jpg, image/gif, image/webp. Funzione pura.async tmfImageToPng(file): se!tmfNeedsPng(file.type)ritornafileinvariato. AltrimenticreateImageBitmap(file), poi canvas con le stesse dimensioni, drawImage,canvas.toBlob(..., 'image/png'), e ritornanew File([blob], <nome senza estensione> + '.png', {type: 'image/png'}). Se la decodifica fallisce (es. TIFF) ritorna null.if (typeof module !== 'undefined') module.exports = { tmfNeedsPng, tmfImageToPng };per il test node, sullo schema di static/js/dxf_recipe_wizard.js se ne ha uno.url_for('static', filename='js/);if (!file) return;,file = await tmfImageToPng(file); se null → errorMessage «Formato immagine non leggibile. Usa PNG, JPG o PDF.» e uploadErrorTask = taskId, return. Poi il controllo allowedTypes resta com'è.uploadErrorTask: null: valorizzato a taskId in ogni ramo di errore di uploadTaskFile (formato, dimensione, errore upload, errore salvataggio, catch); azzerato all'inizio di un upload riuscito e quando errorMessage si svuota non serve gestirlo.<p x-show="uploadErrorTask === task.id && errorMessage" x-text="errorMessage" class="text-xs text-red-600 dark:text-red-400 mt-2"></p>. Il banner in cima resta.file = await tmfImageToPng(file)(null → errorMessage come sopra) e inclusione dello script. Niente riga inline nuova lì._()e voce in translations/it e translations/en messages.po (en: "Unreadable image format. Use PNG, JPG or PDF."). Niente .mo.TEST
image_to_png.jseuploadErrorTask.C:/Users/Adriano/lavoro/TieMeasureFlow-dxfcal-frontend/.venv/Scripts/python.exe -m pytest tests -q -p no:cacheprovider. Base: 9 failed noti (test_admin_user_pin, csrf x2, local_dt x4, test_measure TestTaskComplete, test_template_js_syntax::test_select_recipe_inline_js_is_valid). Nessun fallimento nuovo.NON TOCCARE: src/backend/** (il backend resta stretto: niente BMP lato server), vendor/**, il wizard DXF (blocco ~662-830 di task_editor.html e dxf_recipe_wizard.js), measure/task_execute.html, la modale di ritaglio ImageCrop.
PROVA (Opus): dopo merge e riavvio, headless Edge sul task 8 ricetta 3 con sider_2_1.bmp → modale di ritaglio, «Usa originale», task con file_path .png e anteprima.
🔵 daitarn — preso in carico 2026-10-25T17:06:43Z
ramo:
lavoro/daitarn· capacità: build-windows, gpuSoluzione
ESITO: fatto
RIF: gitea:Adriano/TieMeasureFlow#107
COSA: le immagini leggibili dal browser ma non ammesse dal backend (BMP) si convertono in PNG nel browser prima di ritaglio e upload; l'errore di upload compare anche nel riquadro Disegno Tecnico del task.
FILE (sotto src/frontend/flask_app/):
Commit
a3e032de249999f(Sonnet, claude-sonnet-5-5), ramo lavoro/daitarn-tmf-dxfcal pushato.PROVA:
MANCA: nulla.