by Anonymous » 01 Feb 2025, 08:45
Ich habe einen Datenfluss in einer Fastapi -Anwendung, bei der ein potenziell
sehr großer HTTP -Put -Körper hochgeladen wird, und ich muss dies auf Google Cloud -Speicher streamen. Ich verwende die Bibliothek gCloud.aio.Storage für die Interaktion mit Google Cloud Storage, da sie asyncio unterstützt (sie basiert auf AIOHTTP ). Ich versuche, den Körper durch zu streamen, damit ich den ganzen Körper nicht sofort in Erinnerung behalten muss. < /P>
Das Problem, das ich habe, ist, dass die Fastapi's's request.stream () gibt einen async Generator zurück, während der Speicher Client entweder Rohdaten als Bytes oder String erwartet oder etwas basierend auf IO .Iobase Klasse.
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 mit TypeError fehl: Nicht unterstützter Upload -Typ: "" .
Wie würde ich einen IO bekommen .Iobase abgeleitete Stream-Objekt, das akzeptiert wird, ohne den gesamten Anforderungskörper sofort zu lesen?
Ich habe einen Datenfluss in einer Fastapi -Anwendung, bei der ein potenziell [b] sehr [/b] großer HTTP -Put -Körper hochgeladen wird, und ich muss dies auf Google Cloud -Speicher streamen. Ich verwende die Bibliothek gCloud.aio.Storage für die Interaktion mit Google Cloud Storage, da sie asyncio unterstützt (sie basiert auf AIOHTTP ). Ich versuche, den Körper durch zu streamen, damit ich den ganzen Körper nicht sofort in Erinnerung behalten muss. < /P>
Das Problem, das ich habe, ist, dass die Fastapi's's request.stream () gibt einen async Generator zurück, während der Speicher Client entweder Rohdaten als Bytes oder String erwartet oder etwas basierend auf IO .Iobase Klasse.[code]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
)
[/code]
Es schlägt mit TypeError fehl: Nicht unterstützter Upload -Typ: "" .
Wie würde ich einen IO bekommen .Iobase abgeleitete Stream-Objekt, das akzeptiert wird, ohne den gesamten Anforderungskörper sofort zu lesen?