Skip to content

fix(markdown): imagem no editor vira upload real, nao base64 - #58

Merged
leo-nardo merged 1 commit into
mainfrom
fix/markdown-image-real-upload
Jul 31, 2026
Merged

leo-nardo merged 1 commit into
mainfrom
fix/markdown-image-real-upload

Conversation

@leo-nardo

Copy link
Copy Markdown
Contributor

Bug reportado

Imagem inserida no editor de markdown aparecia quebrada no preview.

Causa raiz

react-markdown sanitiza URLs por padrao e bloqueia o esquema data: (confirmado testando defaultUrlTransform diretamente — retorna string vazia pra data URI, passa normal pra https). A abordagem anterior (PR #56) embutia a imagem como base64 no proprio texto markdown, que e' exatamente o que fica bloqueado.

Alem disso, base64 embutido no campo de texto nao e' o padrao certo — infla o campo (um print de 500KB vira ~700KB de texto), duplica em todo fetch do conteudo, e nao e' assim que editores como TinyMCE fazem (eles fazem upload de verdade e so guardam a URL).

Fix

Reaproveita o pipeline de upload que ja existe no projeto (useFileUploadService, o mesmo usado no comprovante de prova) — paste ou clique em "Inserir imagem" sobem o arquivo pro storage e o markdown guarda ![imagem](url-real), que passa normal pelo sanitizador.

Test plan

  • npx tsc --noEmit
  • npx eslint src/components/markdown-editor.tsx — limpo
  • Confirmado via node que defaultUrlTransform bloqueia data: e aceita https:
  • Confirmar visualmente: inserir imagem no marco Beecrowd e ver o preview renderizar de verdade

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

Dois problemas na abordagem anterior (PR #56):
1. react-markdown bloqueia data: URI por padrao (defaultUrlTransform
   sanitiza e zera a URL) — por isso a imagem aparecia quebrada no preview.
2. Base64 embutido no texto nao e' o padrao certo pra isso (infla o
   campo, duplica em todo fetch do conteudo). O jeito certo, como em
   qualquer editor decente (TinyMCE etc.), e' fazer upload de verdade
   e guardar so a URL — que e' exatamente o que ja fazemos no
   comprovante de prova (ProofSubmissionForm / useFileUploadService).

Reaproveita esse mesmo pipeline: paste ou clique em "Inserir imagem"
sobem o arquivo pro storage (R2/S3, mesmo endpoint /files/upload) e o
markdown so guarda ![imagem](url-real), que passa normal pelo
sanitizador do react-markdown.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 31, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
legado-dev Ready Ready Preview Jul 31, 2026 2:36pm

@sonarqubecloud

Copy link
Copy Markdown

@leo-nardo
leo-nardo merged commit e3f016b into main Jul 31, 2026
5 checks passed
@leo-nardo
leo-nardo deleted the fix/markdown-image-real-upload branch July 31, 2026 14:41

This branch was successfully deployed

1 active deployment
Preview — 09fef2c3 Deployed Jul 31, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant