Speichern und abholen von Dateien mit Amazon S3 und PHP

Dieses Tutorial zeigt dir, wie du Dateien mithilfe von PHP in Amazon S3 speichern und darauf zugreifen kannst. Amazon S3 ist ein skalierbarer, zuverlässiger und einfach zu verwendender Cloud-Speicherdienst. Wir werden die AWS SDK für PHP verwenden, um mit S3 zu interagieren.

Voraussetzungen:

  • Ein AWS-Konto: Melde dich bei AWS an oder erstelle ein neues Konto auf aws.amazon.com.
  • AWS-Zugriffsschlüssel: Erstelle Zugriffsschlüssel in der AWS Management Console unter „IAM“.
  • In der AWS Management Konsole ein Bucket erstellen. Wähle einen eindeutigen Bucket-Namen und die AWS-Region aus.
  • Stelle sicher, dass du Composer auf deinem System installiert hast. Du kannst die Installationsanweisungen auf der Composer-Website finden: https://www.getcomposer.com/
  • AWS SDK für PHP installieren: Installiere die AWS SDK für PHP mit Composer:

Öffne die Konsole und navigiere zum Wurzelverzeichnis deines PHP-Projekts.
Führe den folgenden Befehl aus:

composer require aws/aws-sdk-php

Composer lädt die neueste Version der AWS SDK für PHP herunter und installiert sie in den Vendor-Ordner.

Danach kannst du die SDK in deinem PHP-Code verwenden:

<?php
require 'vendor/autoload.php';

use Aws\S3\S3Client;

// ... dein Code mit der AWS SDK ...
?>

Schritt 1: Konfiguration der AWS SDK für PHP

Erstelle eine PHP-Datei namens config.php und füge die AWS SDK-Konfiguration mit deinen Zugriffsschlüsseln hinzu:

<?php
require 'vendor/autoload.php'; // Pfade entsprechend anpassen

use Aws\S3\S3Client;

// AWS-Zugriffskonfiguration
return [
  'region' => 'your-region', // z.B. 'eu-central-1'
  'version' => 'latest',
  'credentials' => [
    'key' => 'your-access-key',
    'secret' => 'your-secret-key',
  ],
];
?>

Schritt 2: Hochladen einer Datei zu Amazon S3 in die Cloud

Entweder nimmst du zu Testzwecke ein statisches File oder wie in unserem Fall ein einfaches HTML-Formular um Dateien hochzuladen, die dann in der Cloud gespeichert werden.

1. HTML-Formular erstellen:

Erstelle ein HTML-Formular mit einem <input type="file">-Feld, in dem der Benutzer die Datei auswählen kann. Das Formular sollte an ein PHP-Skript gesendet werden, das die hochgeladene Datei verarbeitet.

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>Datei zu S3 hochladen</title>
</head>
<body>
  <h1>Datei zu S3 hochladen</h1>
  <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" required>
    <button type="submit">Hochladen</button>
  </form>
</body>
</html>

2. PHP-Skript zum Verarbeiten der Datei:

Das PHP-Skript empfängt die hochgeladene Datei und verwendet die AWS SDK, um sie auf S3 hochzuladen. Das Skript kann auch weitere Aktionen ausführen, z. B. die Dateieigenschaften speichern oder eine Benachrichtigung versenden.

Erstelle dafür eine PHP-Datei mit dem Namen upload.php, um eine Datei in Amazon S3 hochzuladen:

<?php
require 'config.php';

// Verbindung zum S3-Client herstellen
$s3 = new S3Client($config);

// Prüfen, ob die Datei hochgeladen wurde
if (isset($_FILES['file'])) {
  $file = $_FILES['file'];

  // Dateiname extrahieren
  $fileName = $file['name'];

  // S3-Bucket und Key definieren
  $bucket = 'your-bucket-name'; // Bitte anpassen
  $key = basename($fileName);

  // Temporären Dateipfad erstellen
  $tmpFilePath = sys_get_temp_dir() . '/' . $key;

  // Datei in temporären Pfad verschieben
  if (move_uploaded_file($file['tmp_name'], $tmpFilePath)) {
    // Datei auf S3 hochladen
    try {
      $result = $s3->putObject([
        'Bucket' => $bucket,
        'Key' => $key,
        'SourceFile' => $tmpFilePath,
        'ACL' => 'public-read' // Öffentlicher Zugriff auf die Datei
      ]);

      // Erfolgsmeldung ausgeben
      echo "Datei \"{$fileName}\" wurde erfolgreich hochgeladen. Öffentlicher Link: {$result['ObjectURL']}";

      // Temporäre Datei löschen
      unlink($tmpFilePath);
    } catch (Aws\Exception\AwsException $e) {
      // Fehlermeldung ausgeben
      echo "Fehler beim Hochladen der Datei: {$e->getMessage()}";
    }
  } else {
    // Fehler beim Verschieben der Datei
    echo "Fehler beim Verschieben der temporären Datei.";
  }
} else {
  // Keine Datei ausgewählt
  echo "Bitte wähle eine Datei zum Hochladen aus.";
}
?>

Erläuterung:

  • Das HTML-Formular enthält ein <input type="file">-Feld und einen Submit-Button.
  • Das PHP-Skript prüft, ob die Datei hochgeladen wurde.
  • Wenn die Datei hochgeladen wurde, wird sie in einen temporären Ordner verschoben.
  • Die Datei wird dann mit der AWS SDK auf S3 hochgeladen.
  • Bei Erfolg wird eine Erfolgsmeldung ausgegeben, andernfalls eine Fehlermeldung.
  • Die temporäre Datei wird nach dem Hochladen gelöscht.

Schritt 3: Zugriff auf die hochgeladene Datei

Nachdem du eine Datei mithilfe des Tutorials auf Amazon S3 hochgeladen hast, kannst du über den öffentlichen Link, der automatisch generiert wird, auf sie zugreifen. Dieser Link ermöglicht es dir, die Datei in verschiedenen Kontexten zu verwenden, z. B. in Websites, Apps oder E-Mails.

1. Abrufen des öffentlichen Links:

Der öffentliche Link zur hochgeladenen Datei wird in der $objectUrl-Variable gespeichert. Die Variable enthält den kompletten URL, der aus folgenden Teilen besteht:

  • Protokoll: https://
  • S3-Bucket-Name: your-bucket-name (Ersetze dies durch den Namen deines S3-Buckets)
  • S3-Region: s3-your-region.amazonaws.com (Ersetze your-region durch deine AWS-Region, z. B. eu-central-1 für Frankfurt)
  • Pfad zur Datei: /path/to/your/file.jpg (Ersetze dies durch den Pfad und Dateinamen deiner hochgeladenen Datei)

2. Verwendung des Links in HTML:

Im Beispielcode wird der öffentliche Link verwendet, um ein Bild in einer HTML-Seite anzuzeigen. Dazu wird das <img>-Tag verwendet, dessen src-Attribut auf den $objectUrl gesetzt ist. Der alt-Attribut enthält eine alternative Beschreibung für das Bild, falls es nicht geladen werden kann.

<?php
// Öffentlicher Link zur hochgeladenen Datei
$objectUrl = 'https://your-bucket-name.s3-your-region.amazonaws.com/path/to/your/file.jpg';

// Beispiel für die Verwendung des Links
echo "<img src='{$objectUrl}' alt='Hochgeladenes Bild'>";

// Alternativ: Direkter Link oder Download-Button
echo "<a href='{$objectUrl}'>Datei herunterladen</a>";
?>

3. Alternative Verwendungen des Links:

Neben der Verwendung in HTML kannst du den öffentlichen Link auch für andere Zwecke nutzen:

  • Direkter Download: Füge den Link in eine E-Mail oder einen Text ein, damit Benutzer die Datei direkt herunterladen können.
  • Download-Button: Erstelle in deiner Anwendung einen Button, der beim Klicken den Link öffnet und die Datei herunterlädt.
  • API-Zugriff: Integriere den Link in eine API, um anderen Anwendungen den Zugriff auf die Datei zu ermöglichen.

Wichtig:

  • Der öffentliche Link gewährt standardmäßig öffentlichen Zugriff auf die Datei. Stelle sicher, dass dies deinen Sicherheitsanforderungen entspricht. Du kannst die Zugriffsrechte in den S3-Bucket-Einstellungen konfigurieren.
  • Der Link ist zeitlich unbegrenzt gültig. Du kannst ihn jedoch jederzeit in der S3-Konsole oder mithilfe der AWS SDK löschen.
  • Achte auf die Benennung deiner Dateien. Verwende eindeutige und aussagekräftige Namen, um den Zugriff auf deine Dateien zu erleichtern.

Extra Tipp: Herunterladen von Dateien aus Amazon S3

Um Dateien aus deinem S3-Bucket herunterzuladen, kannst du die Methode getObject verwenden. Diese Methode ermöglicht es dir, die Datei direkt auf deinen lokalen Server oder an einen gewünschten Speicherort herunterzuladen.

Erstelle ein PHP-Skript

Erstelle eine weitere PHP-Datei download.php und ein PHP-Skript, das die getObject-Methode verwendet, um die Datei herunterzuladen. Definiere die Parameter: Lege die folgenden Parameter für die getObject-Methode fest:

  • Bucket: Der Name deines S3-Buckets.
  • Key: Der Pfad und Name der Datei in deinem S3-Bucket.
  • SaveAs: Der Pfad und Dateiname, unter dem die Datei auf deinem Server gespeichert werden soll.

Verwende getObject: Rufe die getObject-Methode auf und übergebe die Parameter. Die Methode gibt ein Objekt vom Typ Aws\S3\StreamWrapper zurück.

Speichere die Datei: Öffne eine Datei im Zielverzeichnis im Schreibmodus und lese die Daten aus dem StreamWrapper-Objekt, um die Datei auf deinem Server zu speichern.

Beispielcode:

<?php
require 'config.php';

// Verbindung zum S3-Client herstellen
$s3 = new S3Client($config);

// Parameter definieren
$bucket = 'your-bucket-name';
$key = 'path/to/your/file.jpg';
$saveAs = '/path/to/save/file.jpg';

// Datei herunterladen
try {
  $result = $s3->getObject([
    'Bucket' => $bucket,
    'Key' => $key,
    'SaveAs' => $saveAs
  ]);

  echo "Datei \"{$key}\" erfolgreich heruntergeladen.";
} catch (Aws\Exception\AwsException $e) {
  echo "Fehler beim Herunterladen der Datei: {$e->getMessage()}";
}
?>

Viel Erfolg bei deinem Projekt!

Hast du noch Fragen, benötigst Hilfe oder hast gar einen Fehler entdeckt?

Wenn du Fragen zu diesem Tutorial hast oder Unterstützung beim Arbeiten mit Amazon S3 und PHP benötigst, zögere nicht, einen Kommentar zu hinterlassen!

* Werbung/Affiliate Link
Aktien und ETFs kaufen

Schreibe einen Kommentar

Erforderliche Felder sind entsprechend markiert.

Wird nicht veröffentlicht.