Wie lade ich Dateien mit request.stream() von FastAPI in Blöcken in Google Cloud Storage hoch?Python

Python-Programme
Guest
 Wie lade ich Dateien mit request.stream() von FastAPI in Blöcken in Google Cloud Storage hoch?

Post by Guest »

Ich habe einen Datenfluss in einer FastAPI-Anwendung, bei dem ein möglicherweise sehr großer HTTP-PUT-Body hochgeladen wird, und ich muss diesen an Google Cloud Storage streamen. Ich verwende die gcloud.aio.storage-Bibliothek für die Interaktion mit Google Cloud Storage, da sie Asyncio-Unterstützung bietet (sie basiert auf aiohttp). Ich versuche, den Körper durchzuströmen, damit ich nicht den ganzen Körper auf einmal im Speicher speichern muss.
Das Problem, das ich habe, sind die FastAPIs request.stream() gibt einen asynchronen-Generator zurück, während der Speicherclient entweder Rohdaten als Bytes oder String oder etwas basierend auf io erwartet .IOBase-Klasse.
Also, wenn ich Folgendes aufrufe:

Code: Select all

async def upload(request: fastapi.Request, storage_client: gcloud.aio.storage.Storage):
upload_stream = request.stream()
await storage_client.upload(
"my_bucket",
"my_object",
upload_stream
)
es schlägt fehl mit TypeError: nicht unterstützter Upload-Typ: „“
Wie würde ich ein io bekommen? IOBase-abgeleitetes Stream-Objekt, das akzeptiert wird, ohne den gesamten Anforderungstext auf einmal zu lesen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post