Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Muat Naik Fail Besar dengan Cekap dengan FastAPI?
Memuat Naik Fail Besar dengan Bahagian Pelayan FastAPI
Pelayan FastAPI boleh mengendalikan muat naik fail besar menggunakan kelas UploadFile. Berikut ialah contoh:
async def uploadfiles(upload_file: UploadFile = File(...)): ...
Masalah dengan Permintaan Sebelah Pelanggan
Apabila menghantar fail besar daripada klien, isu mungkin timbul disebabkan perkara berikut:
Pilihan Lebih Pantas Menggunakan .stream()
Dengan mengakses permintaan body sebagai strim, anda boleh mengelak daripada memuatkan keseluruhan fail ke dalam memori, menghasilkan muat naik yang lebih pantas. Ini boleh dicapai menggunakan kaedah .stream(). Berikut ialah contoh menggunakan pustaka data borang-penstriman:
from streaming_form_data import StreamingFormDataParser from streaming_form_data.targets import FileTarget request_body = await request.stream() parser = StreamingFormDataParser(headers=request.headers) parser.register('upload_file', FileTarget(filepath)) async for chunk in request_body: parser.data_received(chunk)
Pilihan Ganti Menggunakan Muat NaikFail dan Borang
Jika anda lebih suka menggunakan titik akhir def biasa, anda boleh mengendalikan muat naik fail seperti berikut:
from fastapi import File, UploadFile, Form, HTTPException, status import aiofiles import os CHUNK_SIZE = 1024 * 1024 @app.post("/upload") async def upload(file: UploadFile = File(...), data: str = Form(...)): try: filepath = os.path.join('./', os.path.basename(file.filename)) async with aiofiles.open(filepath, 'wb') as f: while chunk := await file.read(CHUNK_SIZE): await f.write(chunk) except Exception: raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail='There was an error uploading the file') finally: await file.close() return {"message": f"Successfuly uploaded {file.filename}"}
Meningkatkan Klien HTTPX Tamat masa
Apabila menggunakan perpustakaan HTTPX, anda mungkin perlu meningkatkan tamat masa untuk mengelakkan tamat masa membaca semasa muat naik fail besar.
timeout = httpx.Timeout(None, read=180.0)
Atas ialah kandungan terperinci Bagaimana untuk Muat Naik Fail Besar dengan Cekap dengan FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!