Dateien mit cURL nach Supabase exportieren
Supabase ist eine leistungsstarke Open-Source-Alternative zu Firebase und bietet Entwicklern eine robuste Backend-as-a-Service-Plattform. Eine der herausragenden Funktionen ist der Cloud-Speicher, mit dem Sie Dateien mühelos speichern und verwalten. In diesem DevTip zeigen wir, wie Sie Ihre Dateiexporte in Supabase-Storage-Buckets mit cURL-Befehlen optimieren und so Ihre Datenverwaltung und Automatisierung verbessern.
Supabase-Konto einrichten und Buckets erstellen
Registrieren Sie sich zunächst für ein Supabase-Konto, falls Sie das noch nicht getan haben. Wechseln Sie nach der Anmeldung in den Bereich „Storage“ und erstellen Sie einen neuen Bucket. Achten Sie darauf, passende Berechtigungen für Ihren Bucket zu setzen, die in der Regel authentifizierten Benutzern das Hochladen von Dateien erlauben.
Beim Erstellen eines Buckets können Sie zwischen öffentlichen und privaten Zugriffsrichtlinien wählen:
- Öffentlich: Dateien sind für alle zugänglich, die über die URL verfügen.
- Privat: Für den Zugriff auf Dateien ist eine Authentifizierung erforderlich.
Verwenden Sie für sensible Daten immer private Buckets mit geeigneten Zugriffskontrollen.
cURL herunterladen und konfigurieren
Auf den meisten Systemen ist cURL bereits vorinstalliert. Die Übertragungsbeispiele setzen cURL
7.76.0 oder neuer für --fail-with-body voraus. Überprüfen Sie Ihre Installation mit
folgendem Befehl:
curl --version
Falls cURL nicht installiert ist, können Sie es einfach nachinstallieren:
- macOS: Verwenden Sie Homebrew
brew install curl
- Linux (Debian/Ubuntu):
sudo apt-get update && sudo apt-get install curl
- Windows: Verwenden Sie den Windows Package Manager (winget) oder laden Sie cURL von der offiziellen Website herunter:
winget install --id cURL.cURL --exact
cURL-Grundlagen verstehen
cURL ist ein Kommandozeilenwerkzeug, das Daten mit verschiedenen Protokollen überträgt. Grundlegende Syntax:
curl -X METHOD [options] URL
Zu den gängigen Methoden gehören GET, POST und PUT. Für Supabase verwenden wir vor allem POST zum
Hochladen von Dateien.
Dateien mit cURL nach Supabase exportieren
Um Dateien nach Supabase hochzuladen, benötigen Sie:
- Ihre Supabase-Projekt-ID (zu finden in der Projekt-URL)
- Ihren Supabase-anon-Key (zu finden unter Project Settings → API)
- Ein JWT-Token für die Authentifizierung (erhalten Sie nach der Benutzeranmeldung)
- Ihren Bucket-Namen
Hier ist die korrekte Struktur des cURL-Befehls zum Hochladen einer Datei:
curl --fail-with-body --show-error -X POST "https://YOUR_PROJECT_ID.supabase.co/storage/v1/object/YOUR_BUCKET_NAME/file.txt" \
-H "apikey: YOUR_SUPABASE_ANON_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: text/plain" \
--data-binary "@file.txt"
Ersetzen Sie YOUR_PROJECT_ID, YOUR_BUCKET_NAME, YOUR_SUPABASE_ANON_KEY und YOUR_JWT_TOKEN durch
Ihre tatsächlichen Werte. Achten Sie darauf, den korrekten Content-Type für Ihre Datei anzugeben. Versehen Sie
jedes Pfadsegment von Bucket und Objekt mit einer Prozentcodierung, wenn es Leerzeichen oder
reservierte URL-Zeichen enthält, und behalten Sie / zwischen Objektordnern bei. Die
Upload-Richtlinien müssen Inserts für den authentifizierten Benutzer erlauben.
Einträge verwalten: Dateien hinzufügen, überschreiben und aktualisieren
Der obige POST erstellt ein neues Objekt und weist einen bereits vorhandenen Pfad zurück. Um ein
Objekt absichtlich zu überschreiben, fügen Sie diesem Befehl -H "x-upsert: true" hinzu; der Benutzer benötigt
zusätzlich Select- und Update-Berechtigungen.
Siehe das Standard-Upload-Verhalten von Supabase.
Verwenden Sie eindeutige Pfade, wenn ältere Inhalte erhalten bleiben müssen. Mit einer HEAD-Anfrage
lässt sich prüfen, ob ein Objekt existiert, doch eine separate Existenzprüfung kann
Wettlaufsituationen mit einem anderen schreibenden Zugriff nicht verhindern:
curl --fail-with-body --show-error --head -o /dev/null -w '%{http_code}\n' \
"https://YOUR_PROJECT_ID.supabase.co/storage/v1/object/YOUR_BUCKET_NAME/file.txt" \
-H "apikey: YOUR_SUPABASE_ANON_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Bei einem zugänglichen Objekt gibt dies 200 aus. Fehlende Objekte oder unzureichende Berechtigungen
führen zu einem Fehlerstatus und einem Exit-Code von curl ungleich null. --head weist curl korrekt an, keinen Body zu erwarten.
Dateigrößenlimits verstehen
Die maximale Dateigröße hängt von Ihrem Tarif, dem globalen Limit des Projekts und einem eventuell
strengeren Bucket-Limit ab. Prüfen Sie das Dashboard und die aktuelle Dokumentation von Supabase zu Dateilimits.
Nutzen Sie für größere Übertragungen die fortsetzbaren tus-Uploads von Supabase.
Die Befehle mit --data-binary @file in dieser Anleitung puffern die Datei im Arbeitsspeicher und lassen sich nicht fortsetzen.
Dateiexport in einem täglichen Workflow automatisieren
Die Automatisierung von Datei-Uploads kann Ihren Workflow erheblich vereinfachen. Hier ein vollständiges Beispiel für ein Bash-Skript:
#!/bin/bash
set -u
# Supply credentials through the environment, with a current user access token.
: "${PROJECT_ID:?Set PROJECT_ID}" "${ANON_KEY:?Set ANON_KEY}" "${JWT_TOKEN:?Set a current user JWT}"
BUCKET_NAME="your-bucket"
FILE_PATH="/path/to/daily-report.csv"
FILE_NAME="reports/daily-report-$(date +%Y-%m-%d).csv"
# Upload command with retry logic
if curl --fail-with-body --show-error -X POST \
"https://$PROJECT_ID.supabase.co/storage/v1/object/$BUCKET_NAME/$FILE_NAME" \
-H "apikey: $ANON_KEY" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: text/csv" \
--retry 3 --retry-delay 5 \
--data-binary "@$FILE_PATH"; then
echo "File uploaded successfully to $BUCKET_NAME/$FILE_NAME"
else
echo "Error uploading file"
exit 1
fi
Verwenden Sie für unbeaufsichtigte Läufe einen Wrapper für Zugangsdaten, der das Access-Token des Benutzers abruft oder erneuert und die erforderlichen Variablen exportiert, bevor er dieses Skript aufruft. Ein eingefügtes Login-JWT läuft ab und taugt nicht als dauerhafte Zugangsdaten für cron. Beschränken Sie die Storage-Richtlinien des Benutzers auf den benötigten Bucket und das benötigte Präfix; ersetzen Sie sie nicht durch einen Service-Role-Key, nur um die Token-Erneuerung zu vermeiden.
Nachdem Sie diesen Wrapper konfiguriert haben, planen Sie ihn mit cron:
crontab -e
Fügen Sie die folgende Zeile hinzu, um das Skript täglich um Mitternacht auszuführen:
0 0 * * * /path/to/your/credential-wrapper.sh
Machen Sie die Skripte ausführbar und verwenden Sie absolute Pfade. Ein erneut ausgeführter täglicher Upload zielt auf denselben Objektnamen und wird zurückgewiesen, sofern Sie sich nicht explizit für Upsert entscheiden. Ein neuer Versuch nach einer verlorenen Antwort kann zudem auf ein Objekt treffen, das der erste Versuch erstellt hat; prüfen Sie das, bevor Sie sich zum Überschreiben entschließen.
Häufige Probleme beheben
Hier sind häufige Fehler, die Ihnen begegnen können, und wie Sie sie beheben:
Authentifizierungsfehler (401 Unauthorized)
{ "statusCode": "401", "error": "Unauthorized", "message": "Invalid JWT" }
Lösung: Stellen Sie sicher, dass Ihr JWT-Token gültig und nicht abgelaufen ist. Zu Testzwecken können Sie über die Supabase Auth API ein neues Token generieren.
Fehler durch doppelte Dateien
{ "statusCode": "409", "error": "Duplicate", "message": "The resource already exists" }
Lösung: Verwenden Sie einen eindeutigen Dateinamen oder implementieren Sie Logik für den Umgang mit bereits vorhandenen Dateien.
Storage-Versionen können doppelte Objekte als 400 Asset Already Exists oder 409 Duplicate melden;
behandeln Sie beide Fälle, anstatt einen dieser Status als Erfolg zu werten.
Dateigrößenlimits (413 Payload Too Large)
{
"statusCode": "413",
"error": "PayloadTooLarge",
"message": "The file size exceeds the maximum limit"
}
Lösung: Stellen Sie sicher, dass Ihre Datei innerhalb der Größenlimits Ihres Supabase-Tarifs liegt.
Zugriff verweigert
Lösung: Prüfen Sie die Bucket-Berechtigungen in Supabase und stellen Sie sicher, dass Ihr JWT-Token über die erforderlichen Berechtigungen verfügt.
Bewährte Sicherheitsverfahren einhalten
Beim Arbeiten mit Supabase und cURL gilt:
- Speichern Sie API-Schlüssel und Tokens in Umgebungsvariablen, niemals fest im Code.
- Verwenden Sie passende Bucket-Berechtigungen (private Buckets für sensible Daten).
- Implementieren Sie eine saubere Fehlerbehandlung und Protokollierung.
- Rotieren Sie Ihre API-Schlüssel regelmäßig, falls sie kompromittiert sein könnten.
- Verwenden Sie HTTPS für alle Anfragen (was Supabase erzwingt).
cURL-Befehle optimieren
-
Verwenden Sie Umgebungsvariablen für sensible Daten:
export SUPABASE_URL="https://YOUR_PROJECT_ID.supabase.co" export SUPABASE_ANON_KEY="YOUR_ANON_KEY" export SUPABASE_JWT="YOUR_JWT_TOKEN" curl --fail-with-body --show-error -X POST "$SUPABASE_URL/storage/v1/object/YOUR_BUCKET_NAME/file.txt" \ -H "apikey: $SUPABASE_ANON_KEY" \ -H "Authorization: Bearer $SUPABASE_JWT" \ -H "Content-Type: text/plain" \ --data-binary "@file.txt" -
Geben Sie stets den für Ihren Dateityp korrekten Header
Content-Typean. -
Implementieren Sie Retries für eine zuverlässige Netzwerkübertragung:
curl --fail-with-body --show-error --retry 3 --retry-delay 5 -X POST "https://YOUR_PROJECT_ID.supabase.co/storage/v1/object/YOUR_BUCKET_NAME/file.txt" \ -H "apikey: $SUPABASE_ANON_KEY" \ -H "Authorization: Bearer $SUPABASE_JWT" \ -H "Content-Type: text/plain" \ --data-binary "@file.txt" -
Verwenden Sie
--fail-with-body, damit cURL bei HTTP-Fehlern einen Exit-Code ungleich null zurückgibt und zugleich den Response-Body für die Diagnose behält. -
Fügen Sie das Flag
-s(silent) hinzu, um Fortschrittsanzeigen für übersichtlichere Logs zu unterdrücken.
Fazit
Der Export von Dateien nach Supabase mit cURL bietet einen leistungsstarken, flexiblen Ansatz für Dateiverwaltung und Automatisierung. Mit den richtigen API-Endpunkten, Authentifizierungs-Headern und bewährten Verfahren erstellen Sie robuste Workflows für den Dateiexport, die sich nahtlos in Ihre Anwendungen integrieren.
Wenn Sie nach noch stärker optimierten Lösungen für den Dateiexport suchen, bietet Transloadit einen umfassenden Dateiexport-Service mit Unterstützung für verschiedene Storage-Anbieter.
