2016-07-28 16 views
0

Ich versuche, Datei auf Google Drive über ihre API hochladen.Join-Datei binär mit Text zu erstellen POST-Anfrage Körper - Python

Nach ihrer Beschreibung wird der Körper der POST-Anforderung soll wie folgt aussehen:

--foo_bar_baz 
Content-Type: application/json; charset=UTF-8 

{ 
    "name": "My File" 
} 

--foo_bar_baz 
Content-Type: image/jpeg 

JPEG data 
--foo_bar_baz-- 

Angenommen, ich habe einen Weg zur JPEG-Datei, wie die Körper der Anforderung zu konstruieren („laden die Datei plus vorangestellt und den Text daran angehängt ")?

Vielen Dank.

PS: Bitte schlagen Sie nicht die Google Client-Bibliothek vor. Es geht um den Antrag des Körpers zu schaffen :)

+1

Es tut mir leid, ich verstehe nicht, warum Sie nicht die tatsächliche Client-Bibliothek verwenden möchten. –

+0

@DanielRoseman andere Geschichte :) Vielleicht, weil es irgendwo anders funktionieren sollte. Die Frage ist, wie man die Anfrage erstellt. Das sollte es wert sein zu wissen :) GDrive ist nur für den Kontext da. – user2781994

Antwort

0

Wie in Advanced Usage diskutiert,

Requests unterstützt Streaming-Uploads, die Sie große Ströme oder Dateien, ohne sie in den Speicher einzulesen senden lassen. Zu streamen und lädt, einfach stellt ein dateiähnliche Objekt für Ihren Körper:

with open('massive-body', 'rb') as f: 
    requests.post('http://some.url/streamed', data=f) 

jedoch beachten, dass es dringend empfohlen, dass Sie offene Dateien im Binär-Modus. Dies liegt daran, dass Requests möglicherweise versuchen, den Content-Length-Header für Sie bereitzustellen, und wenn dies der Fall ist, wird dieser Wert auf die Anzahl der Bytes in der Datei festgelegt. Fehler können auftreten, wenn Sie die Datei im Textmodus öffnen.

Diese Quickstart wird auch hilfreich sein.