

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# CoreHTTP Basic Amazon S3 S3-Upload-Demo
<a name="core-http-s3-upload-demo"></a>

**Wichtig**  <a name="deprecation-message-demo"></a>
Diese Demo wird im Amazon-FreeRTOS-Repository gehostet, das veraltet ist. Wir empfehlen, dass Sie [hier beginnen](freertos-getting-started-modular.md), wenn Sie ein neues Projekt erstellen. Wenn Sie bereits ein vorhandenes FreeRTOS-Projekt haben, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, finden Sie weitere Informationen unter. [Leitfaden zur Migration des Amazon-FreerTOS Github-Repositorys](github-repo-migration.md)

## Einführung
<a name="core-http-s3-upload-demo-intro"></a>

Dieses Beispiel zeigt, wie Sie eine PUT-Anfrage an den Amazon Simple Storage Service (Amazon S3) HTTP-Server senden und eine kleine Datei hochladen. Außerdem wird eine GET-Anfrage ausgeführt, um die Größe der Datei nach dem Upload zu überprüfen. In diesem Beispiel wird eine [Netzwerktransportschnittstelle](https://freertos.org/network-interface.html) verwendet, die MbedTLS verwendet, um eine gegenseitig authentifizierte Verbindung zwischen einem IoT-Geräteclient, auf dem CoreHTTP ausgeführt wird, und dem Amazon S3 S3-HTTP-Server herzustellen.

**Anmerkung**  
Folgen Sie den Schritten unter, um die FreeRTOS-Demos einzurichten und auszuführen. [Erste Schritte mit FreeRTOS](freertos-getting-started.md)

### Single-Thread versus Multi-Threading
<a name="core-http-s3-upload-demo-threads"></a>

Es gibt zwei CoreHTTP-Nutzungsmodelle: *Singlethread* und *Multithread (Multitasking*). Die Demo in diesem Abschnitt führt zwar die HTTP-Bibliothek in einem Thread aus, zeigt aber tatsächlich, wie CoreHTTP in einer Single-Thread-Umgebung verwendet wird. Nur eine Aufgabe in dieser Demo verwendet die HTTP-API. Obwohl Single-Thread-Anwendungen die HTTP-Bibliothek wiederholt aufrufen müssen, können Multithread-Anwendungen stattdessen HTTP-Anfragen im Hintergrund innerhalb einer Agenten- (oder Daemon-) Aufgabe senden.

## Organisation des Quellcodes
<a name="core-http-s3-upload-demo-source-code-organization"></a>

Die Demo-Quelldatei ist benannt `http_demo_s3_upload.c` und befindet sich im `freertos/demos/coreHTTP/` Verzeichnis und auf der [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c)Website.

## Konfiguration der Amazon S3 S3-HTTP-Serververbindung
<a name="core-http-s3-upload-demo-configure-server"></a>

Diese Demo verwendet eine vorsignierte URL, um eine Verbindung zum Amazon S3 S3-HTTP-Server herzustellen und den Zugriff auf das herunterzuladende Objekt zu autorisieren. Die TLS-Verbindung des Amazon S3 S3-HTTP-Servers verwendet nur die Serverauthentifizierung. Auf Anwendungsebene wird der Zugriff auf das Objekt mit Parametern in der vorsignierten URL-Abfrage authentifiziert. Gehen Sie wie folgt vor, um Ihre Verbindung zu zu konfigurieren. AWS

1. Richten Sie ein AWS Konto ein:

   1. Falls Sie es noch nicht getan haben, [erstellen Sie ein AWS Konto](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/).

   1. Konten und Berechtigungen werden mithilfe von AWS Identity and Access Management (IAM) festgelegt. Sie verwenden IAM, um die Berechtigungen für jeden Benutzer in Ihrem Konto zu verwalten. Standardmäßig verfügt ein Benutzer erst dann über Berechtigungen, wenn sie vom Root-Besitzer erteilt wurden.

      1. Informationen zum Hinzufügen eines Benutzers zu Ihrem AWS Konto finden Sie im [IAM-Benutzerhandbuch](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

      1. Erteilen Sie Ihrem AWS Konto die Erlaubnis, auf FreeRTOS zuzugreifen, und AWS IoT fügen Sie diese Richtlinie hinzu:
         + Amazon S3 FullAccess

1. Erstellen Sie einen Bucket in Amazon S3, indem Sie den Schritten unter [Wie erstelle ich einen S3-Bucket folgen?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) im *Amazon Simple Storage Service-Benutzerhandbuch*.

1. Laden Sie eine Datei auf Amazon S3 hoch, indem Sie den Schritten unter [Wie lade ich Dateien und Ordner in einen S3-Bucket hoch?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) folgen .

1. Generieren Sie mithilfe des Skripts, das sich in der `FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py` Datei befindet, eine vorsignierte URL.

   Anweisungen zur Verwendung finden Sie in der `FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md` Datei. 

## Funktionalität
<a name="core-http-s3-upload-demo-functionality"></a>

Die Demo stellt zunächst eine Verbindung zum Amazon S3 S3-HTTP-Server mit TLS-Serverauthentifizierung her. Anschließend wird eine HTTP-Anfrage zum Hochladen der in angegebenen Daten erstellt`democonfigDEMO_HTTP_UPLOAD_DATA`. Nach dem Hochladen der Datei wird überprüft, ob die Datei erfolgreich hochgeladen wurde, indem die Größe der Datei abgefragt wird. Der Quellcode für die Demo ist auf der [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c)Website zu finden. 

### Verbindung zum Amazon S3 S3-HTTP-Server herstellen
<a name="core-http-s3-upload-demo-connecting"></a>

Die [ connectToServerWithBackoffRetries](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170)Funktion versucht, eine TCP-Verbindung zum HTTP-Server herzustellen. Wenn die Verbindung fehlschlägt, versucht sie es nach einem Timeout erneut. Der Timeout-Wert wird exponentiell erhöht, bis die maximale Anzahl von Versuchen oder der maximale Timeout-Wert erreicht ist. Die `connectToServerWithBackoffRetries` Funktion gibt einen Fehlerstatus zurück, wenn die TCP-Verbindung zum Server nach der konfigurierten Anzahl von Versuchen nicht hergestellt werden kann.

Die `prvConnectToServer` Funktion zeigt, wie eine Verbindung zum Amazon S3 S3-HTTP-Server ausschließlich mithilfe der Serverauthentifizierung hergestellt wird. Es verwendet die MbedTLS-basierte Transportschnittstelle, die in der Datei implementiert ist. `FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c` Die Definition von `prvConnectToServer` finden Sie auf der Website. [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L306-L366) 

### Daten hochladen
<a name="core-http-s3-upload-demo-upload-data"></a>

Die `prvUploadS3ObjectFile` Funktion zeigt, wie Sie eine PUT-Anfrage erstellen und die hochzuladende Datei angeben. Der Amazon S3 S3-Bucket, in den die Datei hochgeladen wird, und der Name der hochzuladenden Datei sind in der vorsignierten URL angegeben. Um Speicherplatz zu sparen, wird derselbe Puffer sowohl für die Anforderungsheader als auch für den Empfang der Antwort verwendet. Die Antwort wird synchron mithilfe der `HTTPClient_Send` API-Funktion empfangen. Ein `200 OK` Antwortstatuscode wird vom Amazon S3 S3-HTTP-Server erwartet. Jeder andere Statuscode ist ein Fehler.

Der Quellcode für `prvUploadS3ObjectFile()` kann auf der [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L539-L632)Website gefunden werden.

### Überprüfung des Uploads
<a name="core-http-s3-upload-demo-verifying-data"></a>

Die `prvVerifyS3ObjectFileSize` Funktion ruft `prvGetS3ObjectFileSize` auf, um die Größe des Objekts im S3-Bucket abzurufen. Der Amazon S3 S3-HTTP-Server unterstützt derzeit keine HEAD-Anfragen, die eine vorsignierte URL verwenden, sodass das 0-te Byte angefordert wird. Die Größe der Datei ist im `Content-Range` Header-Feld der Antwort enthalten. Eine `206 Partial Content` Antwort wird vom Server erwartet. Jeder andere Antwortstatuscode ist ein Fehler. 

Der Quellcode für `prvGetS3ObjectFileSize()` kann auf der [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L370-L535)Website gefunden werden. 