EmDash enthält eine Medienbibliothek zur Verwaltung von Bildern, Dokumenten und anderen Dateien. Dieser Leitfaden behandelt das Hochladen, Organisieren und Verwenden von Medien in Ihren Inhalten.
Zugriff auf die Medienbibliothek
Öffnen Sie die Medienbibliothek über die Admin-Seitenleiste, indem Sie auf Media klicken. Die Bibliothek zeigt alle hochgeladenen Dateien mit Vorschaubildern, Dateinamen und Upload-Daten an.
Dateien hochladen
Aus der Medienbibliothek
-
Klicken Sie auf Media in der Admin-Seitenleiste
-
Klicken Sie auf Upload oder ziehen Sie Dateien in den Upload-Bereich
-
Wählen Sie eine oder mehrere Dateien von Ihrem Computer aus
-
Warten Sie, bis die Uploads abgeschlossen sind
Aus dem Content-Editor
-
Klicken Sie im Rich-Text-Editor auf die Bild-Schaltfläche
-
Klicken Sie im Medienauswahldialog auf Upload
-
Wählen Sie eine Datei von Ihrem Computer aus
-
Fügen Sie Alt-Text hinzu und klicken Sie auf Insert
Unterstützte Dateitypen
EmDash unterstützt gängige Web-Dateitypen:
| Kategorie | Erweiterungen |
|---|---|
| Bilder | .jpg, .jpeg, .png, .gif, .webp, .avif, .svg |
| Dokumente | .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx |
| Video | .mp4, .webm, .mov |
| Audio | .mp3, .wav, .ogg |
Speicher-Backends
EmDash unterstützt mehrere Speicher-Backends. Konfigurieren Sie den Speicher in Ihrer Astro-Konfiguration:
Local Storage
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",
}),
}),
],
});Dateien werden im Verzeichnis ./uploads gespeichert. Geeignet für Entwicklung und Single-Server-Bereitstellungen.
Cloudflare R2
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { r2 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
storage: r2({
binding: "MEDIA_BUCKET",
publicUrl: "https://media.example.com",
}),
}),
],
});Erfordert einen R2-Bucket, der in wrangler.jsonc konfiguriert ist:
{
"r2_buckets": [
{
"binding": "MEDIA_BUCKET",
"bucket_name": "my-media-bucket",
},
],
} S3-Compatible
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",
}),
}),
],
});Funktioniert mit Cloudflare R2 (über S3 API), MinIO und anderen S3-kompatiblen Diensten.
Wie Uploads funktionieren
EmDash verwendet signierte URLs für sichere Uploads:
-
Client fordert eine Upload-URL von der API an
-
Server generiert eine signierte URL mit Ablaufzeit
-
Client lädt direkt zum Speicher mit der signierten URL hoch
-
Server speichert die Dateimetadaten in der Datenbank
Dieser Ansatz hält große Dateien von Ihrem Anwendungsserver fern und ermöglicht direkte Uploads in Cloud-Speicher.
Medien organisieren
Ordner
Erstellen Sie Ordner, um Ihre Medien zu organisieren:
-
Klicken Sie auf New Folder in der Medienbibliothek
-
Geben Sie einen Ordnernamen ein
-
Klicken Sie auf Create
-
Ziehen Sie Dateien in Ordner, um sie zu organisieren
Suche
Verwenden Sie das Suchfeld, um Dateien nach Namen zu finden. Die Suche erkennt Teil-Dateinamen.
Filter
Filtern Sie Medien nach:
- Type - Bilder, Dokumente, Video, Audio
- Date - Upload-Datumsbereich
- Folder - Bestimmter Ordner
Medien in Inhalten verwenden
Im Rich-Text-Editor
-
Platzieren Sie Ihren Cursor an der Stelle, an der Sie das Bild einfügen möchten
-
Klicken Sie auf die Bild-Schaltfläche in der Symbolleiste
-
Wählen Sie ein Bild aus der Medienbibliothek aus oder laden Sie ein neues hoch
-
Geben Sie Alt-Text ein
-
Klicken Sie auf Insert
Als Featured Image
-
Öffnen Sie einen Content-Eintrag im Editor
-
Suchen Sie das Feld Featured Image in der Seitenleiste
-
Klicken Sie auf Select Image
-
Wählen Sie aus der Medienbibliothek aus oder laden Sie hoch
-
Klicken Sie auf Save
In benutzerdefinierten Feldern
Für Felder, die als Bild- oder Dateitypen konfiguriert sind, klicken Sie auf das Feld, um die Medienauswahl zu öffnen.
Medien in Templates anzeigen
Greifen Sie auf Medien-URLs aus Ihren Inhaltsdaten zu:
---
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 ?? ""}
/>
)}
Responsive Bilder
Für responsive Bilder verwenden Sie Astros Image-Komponente mit externen URLs:
---
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}
/>
)}
Medien löschen
-
Wählen Sie die Datei(en) aus, die Sie löschen möchten
-
Klicken Sie auf Delete
-
Bestätigen Sie die Löschung
Medien-API
Greifen Sie programmgesteuert auf Medien über die Admin-API zu.
Eine Datei hochladen
Laden Sie Medien als mehrteilige Formulardaten hoch:
POST /_emdash/api/media
Content-Type: multipart/form-data
Authorization: Bearer YOUR_API_TOKEN
file=<binary file data>
Ein erfolgreicher Upload gibt das gespeicherte Medienelement zurück:
{
"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
}
}
}
Medien auflisten
Die folgende Anfrage listet Medien unter einem Präfix auf:
GET /_emdash/api/media?prefix=images/&limit=20
Authorization: Bearer YOUR_API_TOKEN
Medien löschen
Die folgende Anfrage löscht eine gespeicherte Datei:
DELETE /_emdash/api/media/images/hero.jpg
Authorization: Bearer YOUR_API_TOKEN
Medienanbieter
Zusätzlich zum lokalen Speicher unterstützt EmDash externe Medienanbieter für spezialisiertes Bild- und Video-Hosting. Medienanbieter erscheinen als Registerkarten im Medienauswahldialog und ermöglichen Redakteuren die Auswahl aus mehreren Quellen.
Verfügbare Anbieter
Cloudflare Images
Cloudflare Images bietet Bild-Hosting mit automatischer Optimierung, Größenänderung und Formatkonvertierung.
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",
}),
],
}),
],
});Funktionen:
- Bilder direkt aus dem Admin durchsuchen und hochladen
- Automatische Bildoptimierung und Formatkonvertierung
- URL-basierte Transformationen (Größenänderung, Zuschneiden, Format)
- Flexible Varianten für responsive Bilder
Cloudflare Stream
Cloudflare Stream bietet Video-Hosting mit HLS/DASH adaptivem Streaming.
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,
}),
],
}),
],
});Funktionen:
- Videos direkt aus dem Admin durchsuchen, suchen und hochladen
- HLS- und DASH-adaptives Streaming
- Automatische Thumbnail-Generierung
- Direkter Upload für große Dateien
Mehrere Anbieter verwenden
Sie können mehrere Anbieter konfigurieren. Jeder erscheint als Registerkarte im Medienauswahldialog:
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,
}),
],
}),
],
});
Die lokale Medienbibliothek (Registerkarte “Library”) ist immer zusätzlich zu allen konfigurierten Anbietern verfügbar.
Anbieter-Medien rendern
Verwenden Sie die Image-Komponente zum Rendern von Medien:
---
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}
/>
)}
Die Komponente automatisch:
- Erkennt den Anbieter aus dem gespeicherten Wert
- Rendert ein optimiertes
<img>-Element - Wendet anbieterspezifische Optimierungen an (z. B. Cloudflare Images-Transformationen)
MediaValue-Typ
Medienfelder speichern ein MediaValue-Objekt mit Anbieterinformationen:
interface MediaValue {
provider?: string; // Provider ID, defaults to "local"
id: string; // Provider-specific ID
src?: string; // Direct URL (for local media or plain-string values)
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
}
Dies ermöglicht es EmDash, Medien unabhängig vom Hosting-Ort korrekt zu rendern.
Nächste Schritte
- Mit Inhalten arbeiten - Medien in Ihren Inhalten verwenden
- Blog erstellen - Bilder zu Blog-Posts hinzufügen
- Inhalte abfragen - Medien in Templates anzeigen