CreaRack-SL

GET /api/notebook-images/:id — Endpoint stream de imágenes de notas

GET /api/notebook-images/:id — Endpoint stream de imágenes de notas

Handler CF Pages Function creado en PR#56 (2026-05-20). Sirve el blob de una imagen embebida en una nota del Cuaderno, previo check de acceso sobre la nota a la que pertenece.

Fichero: functions/api/notebook-images/[id].ts


Comportamiento

GET /api/notebook-images/:id
  1. Parsea :id como entero; devuelve 400 si no es válido.
  2. Busca el registro en notebook_attachments por id.
  3. Busca la nota asociada (note_id) en notebook_notes.
  4. Evalúa si el actor tiene acceso a la nota (owner_id === me OR shared_with === 'ALL' OR shared_with.includes(me)).
  5. Hace TASK_ATTACHMENTS.get(r2_key) en R2.
  6. Devuelve el stream con las cabeceras correctas.

Respuestas

CódigoSituación
200 OKBlob encontrado y acceso autorizado. Body = stream del objeto R2
400 Bad Request:id no es un entero finito
403 ForbiddenEl actor no tiene acceso a la nota que contiene la imagen
404 Not FoundNo existe fila en notebook_attachments o la nota fue borrada
410 GoneLa row existe pero el objeto R2 ya no (object gone)

Cabeceras de respuesta (200)

Content-Type:        <content_type de notebook_attachments>
Content-Length:      <size_bytes>
Content-Disposition: inline; filename="<filename URL-encoded>"
Cache-Control:       private, max-age=3600
  • Cache-Control: private — no cacheable en proxies públicos; sí por el cliente durante 1 hora.
  • Content-Disposition: inline — el navegador renderiza la imagen en vez de descargarla.

Autenticación del actor

Usa resolveActorEmail(request) de _lib/staff, igual que el resto de los handlers del cuaderno post-PR#56. Si no hay email resuelto, el actor cae a 'web' y el check de acceso fallará en la mayoría de casos (403).


Relación con el endpoint de subida

OperaciónEndpoint
Subir imagen a una notaPOST /api/notebook/:id/images
Servir imagen ya subidaGET /api/notebook-images/:id ← este endpoint

El editor inserta ![alt](/api/notebook-images/{id}) en el Markdown tras una subida exitosa.


Véase también

  • [[feature—notebook—multiusuario-sharing]]
  • [[entity—notebook—table—notebook-attachments]]