Herunterladen eines Objekts - Amazon Simple Storage Service

Willkommen im neuen Amazon-S3-Benutzerhandbuch! Das Amazon-S3-Benutzerhandbuch kombiniert Informationen und Anweisungen aus den drei eingestellten Handbüchern: Amazon-S3-Entwicklerhandbuch, Benutzerhandbuch der Amazon-S3-Konsole und Amazon S3 – Handbuch Erste Schritte.

Herunterladen eines Objekts

In diesem Abschnitt erfahren Sie, wie Sie Objekte aus einem S3-Bucket herunterladen.

Beim Herunterladen von Objekten fallen Übertragungsgebühren an. Informationen zu den Funktionen und Preisen von Amazon S3 finden Sie unter Amazon S3.

Wichtig

Wenn der Schlüsselname eines Objekts aus einem Punkt (.) oder zwei Punkten (..) besteht, kann das Objekt nicht mit der Amazon S3-Konsole heruntergeladen werden. Zum Download eines Objekts mit dem Schlüsselnamen „.“ oder „..“ müssen Sie die AWS CLI, AWS SDKs oder die REST-API verwenden. Weitere Informationen über das Benennen von Objekten finden Sie unter Richtlinien für Objektschlüsselnamen.

Sie können ein einzelnes Objekt pro Anforderung über die Amazon S3-Konsole herunterladen. Um mehrere Objekte herunterzuladen, verwenden Sie die AWS CLI, AWS SDKs oder die REST API.

Wenn Sie ein Objekt programmgesteuert herunterladen, werden seine Metadaten in den Antwortheadern zurückgegeben. Es gibt Situationen, in denen Sie bestimmte Antwortheader-Werte überschreiben können, die in einer GET-Antwort zurückgegeben werden. Beispielsweise könnten Sie den Antwort-Header-Wert Content-Disposition in Ihrer GET-Anforderung überschreiben. Die REST GET Object API (siehe GET Object) ermöglicht Ihnen, Abfragezeichenfolgenparameter in Ihrer GET-Anforderung anzugeben, um diese Werte zu überschreiben. Die AWS SDKs for Java, .NET und PHP stellen zudem die erforderlichen Objekte bereit, mit denen Sie Werte für diese Antwort-Header in Ihrer GET-Anforderung angeben können.

Wenn Sie Objekte abrufen, die mit serverseitiger Verschlüsselung (SSE) verschlüsselt gespeichert sind, müssen Sie geeignete Anforderungs-Header bereitstellen. Weitere Informationen finden Sie unter Datenschutz durch Verschlüsselung.

In diesem Abschnitt erfahren Sie, wie Sie mit der Amazon S3-Konsole Objekte aus einem S3-Bucket herunterladen.

Beim Herunterladen von Objekten fallen Übertragungsgebühren an. Informationen zu den Funktionen und Preisen von Amazon S3 finden Sie unter Amazon S3.

Wichtig

Wenn der Schlüsselname eines Objekts aus einem Punkt (.) oder zwei Punkten (..) besteht, kann das Objekt nicht mit der Amazon S3-Konsole heruntergeladen werden. Zum Download eines Objekts mit dem Schlüsselnamen „.“ oder „..“ müssen Sie die AWS CLI, AWS SDKs oder die REST-API verwenden. Weitere Informationen über das Benennen von Objekten finden Sie unter Richtlinien für Objektschlüsselnamen.

Ein Objekt von einem S3-Bucket herunterladen

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3.

  2. Wählen Sie in der Liste Buckets den Namen des Buckets aus, aus dem Sie ein Objekt herunterladen möchten.

  3. Sie können ein Objekt wie folgt aus einem S3-Bucket herunterladen:

    • Klicken Sie auf den Namen des Objekts, das Sie herunterladen möchten.

      Wählen Sie auf der Seite Overview (Übersicht) die Option Download (Herunterladen) aus.

    • Wählen Sie den Namen des Objekts aus, das Sie herunterladen möchten, und wählen Sie dann im Menü Action (Aktion) die Option Download (Herunterladen) oder Download as (Herunterladen als).

    • Klicken Sie auf den Namen des Objekts, das Sie herunterladen möchten. Wählen Sie Latest version (Aktuelle Version) aus. Klicken Sie anschließend auf das Symbol zum Herunterladen.

Java

Wenn Sie ein Objekt über Das AWS SDK for Java herunterladen, gibt Amazon S3 alle Metadaten des Objekts sowie und einen Eingabe-Stream, aus dem Sie den Inhalt des Objekts herauslesen können, zurück.

Zum Abrufen eines Objekts verfahren Sie wie folgt:

  • Führen Sie die AmazonS3Client.getObject()-Methode aus, indem Sie in der Anforderung den Bucket-Namen und Objektschlüssel bereitstellen.

  • Führen Sie eine der S3Object-Instance-Methoden aus, um den Eingabe-Stream zu verarbeiten.

Anmerkung

Ihre Netzwerkverbindung bleibt offen, bis Sie alle Daten lesen oder den Eingabe-Stream schließen. Wir empfehlen, dass Sie den Inhalt des Streams möglichst schnell lesen.

Es folgen einige Variationen, die Sie möglicherweise verwenden:

  • Statt das ganze Objekt zu lesen, können Sie auch nur einen Teil der Objektdaten lesen, indem Sie in der Anforderung den gewünschten Bytebereich angeben.

  • Sie können optional die Antwort-Header-Werte überschreiben. Dazu verwenden Sie ein ResponseHeaderOverrides-Objekt und legen die entsprechende Anforderungseigenschaft fest. Sie können mit dieser Funktion beispielsweise angeben, dass das Objekt in eine Datei mit einem anderen Dateinamen als dem Objektschlüsselnamen heruntergeladen werden soll.

Das folgende Beispiel ruft ein Objekt auf drei Arten aus einem Amazon S3-Bucket ab: zuerst als vollständiges Objekt, dann als ein Bereich von Bytes aus dem Objekt und schließlich als vollständiges Objekt mit überschriebenen Antwort-Header-Werten. Weitere Informationen zum Abrufen von Objekten aus Amazon S3 finden Sie unter GET Object. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.ResponseHeaderOverrides; import com.amazonaws.services.s3.model.S3Object; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class GetObject2 { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String key = "*** Object key ***"; S3Object fullObject = null, objectPortion = null, headerOverrideObject = null; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Get an object and print its contents. System.out.println("Downloading an object"); fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key)); System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType()); System.out.println("Content: "); displayTextInputStream(fullObject.getObjectContent()); // Get a range of bytes from an object and print the bytes. GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, key) .withRange(0, 9); objectPortion = s3Client.getObject(rangeObjectRequest); System.out.println("Printing bytes retrieved."); displayTextInputStream(objectPortion.getObjectContent()); // Get an entire object, overriding the specified response headers, and print the object's content. ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides() .withCacheControl("No-cache") .withContentDisposition("attachment; filename=example.txt"); GetObjectRequest getObjectRequestHeaderOverride = new GetObjectRequest(bucketName, key) .withResponseHeaders(headerOverrides); headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride); displayTextInputStream(headerOverrideObject.getObjectContent()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } finally { // To ensure that the network connection doesn't remain open, close any open input streams. if (fullObject != null) { fullObject.close(); } if (objectPortion != null) { objectPortion.close(); } if (headerOverrideObject != null) { headerOverrideObject.close(); } } } private static void displayTextInputStream(InputStream input) throws IOException { // Read the text input stream one line at a time and display each line. BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } System.out.println(); } }
.NET

Wenn Sie ein Objekt herunterladen, erhalten Sie alle Metadaten des Objekts, sowie einen Stream, aus dem Sie den Inhalt herauslesen können. Sie sollten den Inhalt des Streams so schnell wie möglich lesen, weil die Daten direkt von Amazon S3 gestreamt werden, und Ihre Netzwerkverbindung offen bleibt, bis Sie alle Daten gelesen haben oder den Eingabestream schließen. Sie verfahren zum Abrufen eines Objekts wie folgt:

  • Führen Sie die getObject-Methode aus, indem Sie in der Anforderung den Bucket-Namen und Objektschlüssel bereitstellen.

  • Führen Sie eine der GetObjectResponse-Methoden aus, um den Stream zu verarbeiten.

Es folgen einige Variationen, die Sie möglicherweise verwenden:

  • Statt das ganze Objekt zu lesen, können Sie auch einen Teil der Objektdaten lesen, indem Sie in der Abfrage den Bytebereich angeben, wie im folgenden C#-Codebeispiel gezeigt:

    GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName, ByteRange = new ByteRange(0, 10) };
  • Wenn Sie ein Objekt abrufen, können Sie optional die Antwort-Header-Werte überschreiben (siehe Herunterladen eines Objekts). Dazu verwenden Sie das ResponseHeaderOverrides-Objekt und legen die entsprechende Anfrageeigenschaft fest. Das folgende C#-Codebeispiel veranschaulicht, wie dazu vorgegangen wird. Sie können mit dieser Funktion beispielsweise angeben, dass das Objekt in eine Datei mit einem anderen Dateinamen als dem Objektschlüsselnamen heruntergeladen werden soll.

    GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides(); responseHeaders.CacheControl = "No-cache"; responseHeaders.ContentDisposition = "attachment; filename=testing.txt"; request.ResponseHeaderOverrides = responseHeaders;

Das folgende C#-Codebeispiel ruft ein Objekt aus einem Amazon S3-Bucket ab. Aus der Antwort liest das Beispiel die Objektdaten unter Verwendung der GetObjectResponse.ResponseStream-Eigenschaft. Das Beispiel zeigt auch, wie Sie die GetObjectResponse.Metadata-Sammlung verwenden können, um Objektmetadaten zu lesen. Wenn das von Ihnen abgerufene Objekt die x-amz-meta-title-Metadaten enthält, gibt der Code den Metadatenwert aus.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.IO; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class GetObjectTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); ReadObjectDataAsync().Wait(); } static async Task ReadObjectDataAsync() { string responseBody = ""; try { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = await client.GetObjectAsync(request)) using (Stream responseStream = response.ResponseStream) using (StreamReader reader = new StreamReader(responseStream)) { string title = response.Metadata["x-amz-meta-title"]; // Assume you have "title" as medata added to the object. string contentType = response.Headers["Content-Type"]; Console.WriteLine("Object metadata, Title: {0}", title); Console.WriteLine("Content type: {0}", contentType); responseBody = reader.ReadToEnd(); // Now you process the response body. } } catch (AmazonS3Exception e) { // If bucket or object does not exist Console.WriteLine("Error encountered ***. Message:'{0}' when reading object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when reading object", e.Message); } } } }
PHP

In diesem Thema wird erläutert, wie Sie eine Klasse aus dem AWS SDK for PHP verwenden, um ein Amazon S3-Objekt abzurufen. Sie können ein gesamtes Objekt oder einen Bytebereich des Objekts abrufen. Es wird vorausgesetzt, dass Sie bereits die Anweisungen für Verwenden des AWS SDK for PHP und Ausführen von PHP-Beispielen befolgt haben und AWS SDK for PHP ordnungsgemäß installiert ist.

Wenn Sie ein Objekt abrufen, können Sie optional die Antwort-Header-Werte überschreiben. Dazu fügen Sie die Antwortschlüssel ResponseContentType, ResponseContentLanguage, ResponseContentDisposition, ResponseCacheControl und ResponseExpires der getObject()-Methode hinzu, wie im folgenden PHP-Codebeispiel veranschaulicht:

$result = $s3->getObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'ResponseContentType' => 'text/plain', 'ResponseContentLanguage' => 'en-US', 'ResponseContentDisposition' => 'attachment; filename=testing.txt', 'ResponseCacheControl' => 'No-cache', 'ResponseExpires' => gmdate(DATE_RFC2822, time() + 3600), ]);

Weitere Informationen über das Abrufen von Objekten finden Sie unter Herunterladen eines Objekts.

Das folgende PHP-Codebeispiel ruft ein Objekt ab und zeigt den Objektinhalt im Browser an. Das Beispiel veranschaulicht, wie Sie die getObject()-Methode verwenden. Weitere Informationen zur Ausführung der PHP-Beispiele in dieser Anleitung finden Sie unter PHP-Beispiele ausführen.

require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); try { // Get the object. $result = $s3->getObject([ 'Bucket' => $bucket, 'Key' => $keyname ]); // Display the object in the browser. header("Content-Type: {$result['ContentType']}"); echo $result['Body']; } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }

Sie können das AWS SDK verwenden, um die Objektschlüssel von einem Bucket abzurufen. Falls in Ihrer Anwendung jedoch erforderlich, können Sie REST-Anforderungen auch direkt senden. Sie können eine GET-Anforderung senden, um Objektschlüssel abzurufen.

Weitere Informationen über das Anforderungs- und Antwort-Format finden sie unter Get Object.