Biblioteca de medios
EmDash incluye una biblioteca multimedia para gestionar imágenes, documentos y otros archivos. Esta guía cubre la carga, organización y uso de medios en tu contenido.
Acceder a la biblioteca multimedia
Sección titulada «Acceder a la biblioteca multimedia»Abre la biblioteca multimedia desde la barra lateral de administración haciendo clic en Medios. La biblioteca muestra todos los archivos cargados con vistas previas, nombres de archivo y fechas de carga.
Cargando Archivos
Sección titulada «Cargando Archivos»Desde la Biblioteca de Medios
Sección titulada «Desde la Biblioteca de Medios»-
Haz clic en Medios en la barra lateral de administración
-
Haz clic en Cargar o arrastra archivos al área de carga
-
Selecciona uno o más archivos desde tu computadora
-
Espera a que se completen las cargas
Desde el Editor de Contenido
Sección titulada «Desde el Editor de Contenido»-
En el editor de texto enriquecido, haz clic en el botón de imagen
-
Haz clic en Cargar en el selector de medios
-
Selecciona un archivo desde tu computadora
-
Añade texto alternativo y haz clic en Insertar
Tipos de Archivo Soportados
Sección titulada «Tipos de Archivo Soportados»EmDash soporta tipos de archivo web comunes:
| Categoría | Extensiones |
|---|---|
| Imágenes | .jpg, .jpeg, .png, .gif, .webp, .avif, .svg |
| Documentos | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx |
| Video | .mp4, .webm, .mov |
| Audio | .mp3, .wav, .ogg |
Backends de Almacenamiento
Sección titulada «Backends de Almacenamiento»EmDash soporta múltiples backends de almacenamiento. Configura el almacenamiento en tu configuración de Astro:
import { defineConfig } from "astro/config";import emdash, { local } from "emdash/astro";
export default defineConfig({ integrations: [ emdash({ storage: local({ directory: "./uploads", baseUrl: "/_emdash/api/media/file", }), }), ],});Los archivos se almacenan en el directorio ./uploads. Adecuado para desarrollo y despliegues de un solo servidor.
import { defineConfig } from "astro/config";import emdash, { r2 } from "emdash/astro";
export default defineConfig({ integrations: [ emdash({ storage: r2({ binding: "MEDIA_BUCKET", publicUrl: "https://media.example.com", }), }), ],});Requiere un bucket de R2 configurado en wrangler.jsonc:
{ "r2_buckets": [ { "binding": "MEDIA_BUCKET", "bucket_name": "my-media-bucket", }, ],}import { defineConfig } from "astro/config";import emdash, { s3 } from "emdash/astro";
export default defineConfig({ integrations: [ emdash({ storage: s3({ endpoint: "https://s3.amazonaws.com", bucket: "my-media-bucket", accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, region: "us-east-1", publicUrl: "https://media.example.com", }), }), ],});Funciona con Cloudflare R2 (vía API S3), MinIO y otros servicios compatibles con S3.
Cómo funcionan las cargas
Sección titulada «Cómo funcionan las cargas»EmDash utiliza URLs firmadas para cargas seguras:
-
El cliente solicita una URL de carga a la API
-
El servidor genera una URL firmada con expiración
-
El cliente carga directamente al almacenamiento usando la URL firmada
-
El servidor registra los metadatos del archivo en la base de datos
Este enfoque mantiene los archivos grandes fuera de tu servidor de aplicaciones y permite cargas directas al almacenamiento en la nube.
Organizar medios
Sección titulada «Organizar medios»Carpetas
Sección titulada «Carpetas»Crea carpetas para organizar tus medios:
-
Haz clic en Nueva Carpeta en la biblioteca multimedia
-
Introduce un nombre para la carpeta
-
Haz clic en Crear
-
Arrastra archivos a las carpetas para organizarlos
Búsqueda
Sección titulada «Búsqueda»Usa el cuadro de búsqueda para encontrar archivos por nombre. La búsqueda coincide con nombres de archivo parciales.
Filtros
Sección titulada «Filtros»Filtra medios por:
- Tipo - Imágenes, Documentos, Video, Audio
- Fecha - Rango de fecha de carga
- Carpeta - Carpeta específica
Usar medios en el contenido
Sección titulada «Usar medios en el contenido»En el editor de texto enriquecido
Sección titulada «En el editor de texto enriquecido»-
Coloca el cursor donde quieras la imagen
-
Haz clic en el botón de imagen en la barra de herramientas
-
Selecciona una imagen de la biblioteca multimedia o carga una nueva
-
Introduce el texto alternativo
-
Haz clic en Insertar
Como imagen destacada
Sección titulada «Como imagen destacada»-
Abre una entrada de contenido en el editor
-
Encuentra el campo Imagen Destacada en la barra lateral
-
Haz clic en Seleccionar Imagen
-
Elige de la biblioteca multimedia o carga una
-
Haz clic en Guardar
En campos personalizados
Sección titulada «En campos personalizados»Para campos configurados como tipos de imagen o archivo, haz clic en el campo para abrir el selector de medios.
Mostrar medios en plantillas
Sección titulada «Mostrar medios en plantillas»Accede a las URLs de medios desde tus datos de contenido:
---import { getEmDashEntry } from "emdash";
const { entry: post } = await getEmDashEntry("posts", Astro.params.slug);---
{post?.data.featured_image && ( <img src={post.data.featured_image} alt={post.data.featured_image_alt ?? ""} />)}Imágenes Responsivas
Sección titulada «Imágenes Responsivas»Para imágenes responsivas, usa el componente Image de Astro con URLs externas:
---import { Image } from "astro:assets";import { getEmDashEntry } from "emdash";
const { entry: post } = await getEmDashEntry("posts", Astro.params.slug);---
{post?.data.featured_image && ( <Image src={post.data.featured_image} alt={post.data.featured_image_alt ?? ""} width={800} height={450} />)}Eliminar medios
Sección titulada «Eliminar medios»-
Selecciona el/los archivo(s) que quieres eliminar
-
Haz clic en Eliminar
-
Confirma la eliminación
API de medios
Sección titulada «API de medios»Accede a los medios mediante programación usando la API de administración.
Cargar un archivo
Sección titulada «Cargar un archivo»Carga medios como datos de formulario multiparte:
POST /_emdash/api/mediaContent-Type: multipart/form-dataAuthorization: Bearer YOUR_API_TOKEN
file=<binary file data>Respuesta:
{ "success": true, "data": { "item": { "id": "01ABC123", "filename": "hero-image.jpg", "mime_type": "image/jpeg", "storage_key": "media/abc123/hero-image.jpg", "width": 1200, "height": 800 } }}Listar medios
Sección titulada «Listar medios»GET /_emdash/api/media?prefix=images/&limit=20Authorization: Bearer YOUR_API_TOKENEliminar medios
Sección titulada «Eliminar medios»DELETE /_emdash/api/media/images/hero.jpgAuthorization: Bearer YOUR_API_TOKENProveedores de medios
Sección titulada «Proveedores de medios»Además del almacenamiento local, EmDash soporta proveedores de medios externos para alojamiento especializado de imágenes y video. Los proveedores de medios aparecen como pestañas en el selector de medios, permitiendo a los editores elegir entre múltiples fuentes.
Proveedores disponibles
Sección titulada «Proveedores disponibles»Cloudflare Images proporciona alojamiento de imágenes con optimización automática, redimensionamiento y conversión de formato.
import { defineConfig } from "astro/config";import emdash from "emdash/astro";import { cloudflareImages } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ // ... database, storage config mediaProviders: [ cloudflareImages({ accountId: import.meta.env.CF_ACCOUNT_ID, apiToken: import.meta.env.CF_IMAGES_TOKEN, // Optional: custom delivery domain deliveryDomain: "images.example.com", }), ], }), ],});Características:
- Navegar y cargar imágenes directamente desde el administrador
- Optimización automática de imágenes y conversión de formato
- Transformaciones basadas en URL (redimensionar, recortar, formato)
- Variantes flexibles para imágenes responsivas
Cloudflare Stream proporciona alojamiento de video con streaming adaptativo HLS/DASH.
import { defineConfig } from "astro/config";import emdash from "emdash/astro";import { cloudflareStream } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ // ... database, storage config mediaProviders: [ cloudflareStream({ accountId: import.meta.env.CF_ACCOUNT_ID, apiToken: import.meta.env.CF_STREAM_TOKEN, // Optional: player settings controls: true, autoplay: false, loop: false, }), ], }), ],});Características:
- Navegar, buscar y cargar videos desde el administrador
- Streaming adaptativo HLS y DASH
- Generación automática de miniaturas
- Carga directa para archivos grandes
Usar múltiples proveedores
Sección titulada «Usar múltiples proveedores»Puedes configurar múltiples proveedores. Cada uno aparece como una pestaña en el selector de medios:
import { defineConfig } from "astro/config";import emdash from "emdash/astro";import { cloudflareImages, cloudflareStream } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ database: d1({ binding: "DB" }), storage: r2({ binding: "MEDIA" }), mediaProviders: [ cloudflareImages({ accountId: import.meta.env.CF_ACCOUNT_ID, apiToken: import.meta.env.CF_IMAGES_TOKEN, }), cloudflareStream({ accountId: import.meta.env.CF_ACCOUNT_ID, apiToken: import.meta.env.CF_STREAM_TOKEN, }), ], }), ],});La biblioteca multimedia local (pestaña “Biblioteca”) siempre está disponible junto con cualquier proveedor configurado.
Renderizar medios del proveedor
Sección titulada «Renderizar medios del proveedor»Usa el componente Image para renderizar medios:
---import { Image } from "emdash/ui";import { getEmDashEntry } from "emdash";
const { entry: post } = await getEmDashEntry("posts", Astro.params.slug);---
{post?.data.featured_image && ( <Image image={post.data.featured_image} width={800} height={450} />)}El componente automáticamente:
- Detecta el proveedor a partir del valor almacenado
- Renderiza un elemento
<img>optimizado - Aplica optimizaciones específicas del proveedor (por ejemplo, transformaciones de Cloudflare Images)
Tipo MediaValue
Sección titulada «Tipo MediaValue»Los campos de medios almacenan un objeto MediaValue que contiene información del proveedor:
interface MediaValue { provider?: string; // Provider ID, defaults to "local" id: string; // Provider-specific ID src?: string; // Direct URL (for local media or legacy data) previewUrl?: string; // Preview URL for admin display (external providers) filename?: string; // Original filename mimeType?: string; // MIME type width?: number; // Image/video width height?: number; // Image/video height alt?: string; // Alt text meta?: Record<string, unknown>; // Provider-specific metadata}Esto permite que EmDash renderice los medios correctamente sin importar dónde estén alojados.
Próximos Pasos
Sección titulada «Próximos Pasos»- Trabajar con Contenido - Usar medios en tu contenido
- Crear un Blog - Añadir imágenes a las entradas del blog
- Consultar Contenido - Mostrar medios en plantillas