Pular para o conteúdo

Biblioteca de Mídia

O EmDash inclui uma biblioteca de mídia para gerenciar imagens, documentos e outros arquivos. Este guia aborda o upload, organização e uso de mídia em seu conteúdo.

Abra a biblioteca de mídia a partir da barra lateral de administração clicando em Mídia. A biblioteca exibe todos os arquivos enviados com pré-visualizações, nomes de arquivo e datas de upload.

EmDash media library showing image grid with upload button
  1. Clique em Mídia na barra lateral de administração

  2. Clique em Upload ou arraste arquivos para a área de upload

  3. Selecione um ou mais arquivos do seu computador

  4. Aguarde a conclusão dos uploads

  1. No editor de texto rico, clique no botão de imagem

  2. Clique em Upload no seletor de mídia

  3. Selecione um arquivo do seu computador

  4. Adicione o texto alternativo e clique em Inserir

O EmDash suporta tipos de arquivo web comuns:

CategoriaExtensões
Imagens.jpg, .jpeg, .png, .gif, .webp, .avif, .svg
Documentos.pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx
Vídeo.mp4, .webm, .mov
Áudio.mp3, .wav, .ogg

O EmDash suporta múltiplos backends de armazenamento. Configure o armazenamento no seu arquivo de configuração do Astro:

astro.config.mjs
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",
}),
}),
],
});

Os arquivos são armazenados no diretório ./uploads. Adequado para desenvolvimento e implantações de servidor único.

O EmDash usa URLs assinadas para uploads seguros:

  1. O cliente solicita uma URL de upload da API

  2. O servidor gera uma URL assinada com expiração

  3. O cliente faz o upload diretamente para o armazenamento usando a URL assinada

  4. O servidor registra os metadados do arquivo no banco de dados

Esta abordagem mantém arquivos grandes fora do seu servidor de aplicação e permite uploads diretos para armazenamento em nuvem.

Crie pastas para organizar sua mídia:

  1. Clique em Nova Pasta na biblioteca de mídia

  2. Digite um nome para a pasta

  3. Clique em Criar

  4. Arraste arquivos para as pastas para organizá-los

Use a caixa de busca para encontrar arquivos pelo nome. A busca corresponde a partes do nome do arquivo.

Filtre a mídia por:

  • Tipo - Imagens, Documentos, Vídeo, Áudio
  • Data - Intervalo de data de upload
  • Pasta - Pasta específica
  1. Posicione o cursor onde deseja a imagem

  2. Clique no botão de imagem na barra de ferramentas

  3. Selecione uma imagem da biblioteca de mídia ou envie uma nova

  4. Insira o texto alternativo

  5. Clique em Inserir

  1. Abra uma entrada de conteúdo no editor

  2. Encontre o campo Imagem Destacada na barra lateral

  3. Clique em Selecionar Imagem

  4. Escolha da biblioteca de mídia ou faça upload

  5. Clique em Salvar

Para campos configurados como tipos de imagem ou arquivo, clique no campo para abrir o seletor de mídia.

Acesse URLs de mídia a partir dos dados do seu conteúdo:

astro title="src/pages/posts/[slug].astro"
---
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 ?? ""}
/>
)}

Para imagens responsivas, use o componente Image do Astro com URLs externas:

Para imagens responsivas, use o componente Image do Astro com 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}
/>
)}
  1. Selecione o(s) arquivo(s) que deseja excluir

  2. Clique em Excluir

  3. Confirme a exclusão

Acesse mídia programaticamente usando a API de administração.

Faça upload de mídia como dados de formulário multipart:

Terminal window
POST /_emdash/api/media
Content-Type: multipart/form-data
Authorization: Bearer YOUR_API_TOKEN
file=<binary file data>

Resposta:

{
"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
}
}
}
Terminal window
GET /_emdash/api/media?prefix=images/&limit=20
Authorization: Bearer YOUR_API_TOKEN
Terminal window
DELETE /_emdash/api/media/images/hero.jpg
Authorization: Bearer YOUR_API_TOKEN

Além do armazenamento local, o EmDash suporta provedores de mídia externos para hospedagem especializada de imagens e vídeos. Os provedores de mídia aparecem como abas no seletor de mídia, permitindo que editores escolham entre múltiplas fontes.

Cloudflare Images fornece hospedagem de imagens com otimização automática, redimensionamento e conversão de formato.

js title="astro.config.mjs"
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",
}),
],
}),
],
});

Recursos:

  • Navegue e envie imagens diretamente do painel de administração
  • Otimização automática de imagem e conversão de formato
  • Transformações baseadas em URL (redimensionar, cortar, formato)
  • Variantes flexíveis para imagens responsivas

Você pode configurar múltiplos provedores. Cada um aparece como uma aba no seletor de mídia:

js title="astro.config.mjs"
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,
}),
],
}),
],
});

A biblioteca de mídia local (aba “Biblioteca”) está sempre disponível junto com quaisquer provedores configurados.

Use o componente Image para renderizar mídia:

astro title="src/pages/posts/[slug].astro"
---
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}
/>
)}

O componente automaticamente:

  • Detecta o provedor a partir do valor armazenado
  • Renderiza um elemento <img> otimizado
  • Aplica otimizações específicas do provedor (ex.: transformações do Cloudflare Images)

Campos de mídia armazenam um objeto MediaValue contendo informações do provedor:

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
}

Isso permite que o EmDash renderize mídia corretamente, independentemente de onde esteja hospedada.