2016-09-12 2 views
0

Ich habe diese Frage bereits im AWS Developer Forum gestellt, ohne eine Antwort zu erhalten. Also hier geht:Eigene Mediendateien können nach AWS S3-Download mit libCurl + -Headern nicht geöffnet werden

Ich lade meine eigenen Mediendateien aus meinem eigenen AWS S3-Bucket mit meiner eigenen libCurl C++ - Anwendung.

Wenn ich eine Datei als öffentlich markieren und sie mit einer einfachen libCurl GET-Anfrage (keine zusätzlichen Header) herunterladen, funktioniert die heruntergeladene Datei einwandfrei. Wenn ich jedoch genau die gleiche Datei wie private markieren und Kopfzeilen zur GET-Anfrage hinzufügen (Host, x-amz-Datum, x-amz-content-sha256 und Autorisierungs-Header), kann ich die heruntergeladene Datei nicht öffnen.

Meine Frage ist: Warum ändert das Hinzufügen von Kopfzeilen zur GET-Anfrage die heruntergeladene Datei? Und was kann ich tun, um das zu beheben?

UPDATE: Mit einem Hex-Editor habe ich herausgefunden, dass die HTTP-Antwort am Anfang in die empfangene Datei geschrieben wird. Wie kann ich das verhindern?

Vielen Dank im Voraus!

+0

Es sollte nicht. Was Sie tun, ist sehr Routine ... aber, wie machen Sie die Datei privat/öffentlich? Einfach in der Konsole umschalten? (Da sollte das auch gut sein ...) Haben Sie die resultierenden Dateien mit einem Hex-Editor untersucht? –

+0

Vielen Dank @ Michael-sqlbot für den Vorschlag, einen Hex-Editor zu verwenden! Es scheint, dass die HTTP-Antwort am Anfang in die empfangene Mediendatei geschrieben wird. Das erklärt, warum ich diese Dateien nicht benutzen kann ... Aber warum ist das und wie kann ich das verhindern? – Chrueschschie

+0

Und ja, ich bearbeite einfach die Eigenschaften der Dateien in der S3 Management Console, um sie privat/öffentlich zu machen. Sie sind jetzt öffentlich zum Testen, aber auf lange Sicht müssen sie privat sein. – Chrueschschie

Antwort

0

Ich fand die Lösung. Nur hatte diese Linie von meinem Code zu entfernen:

curl_easy_setopt(curl, CURLOPT_HEADER, true); 

Anfangs dachte ich diese Linie würde mir erlauben, zusätzliche Header meiner HTTP-Anforderung hinzuzufügen ... Stattdessen enthält es die HTTP-Antwort in der Ausgabe, die war mein Problem.

Verwandte Themen