Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Muat Naik Fail Besar dengan Cekap (≥3GB) ke Bahagian Belakang FastAPI?

Bagaimana untuk Muat Naik Fail Besar dengan Cekap (≥3GB) ke Bahagian Belakang FastAPI?

Mary-Kate Olsen
Lepaskan: 2024-11-28 09:46:12
asal
211 orang telah melayarinya

How to Efficiently Upload Large Files (≥3GB) to a FastAPI Backend?

Bagaimana hendak Muat Naik Fail Besar (≥3GB) ke bahagian belakang FastAPI?

Menggunakan Requests-Toolbelt

Apabila menggunakan pustaka requests-toolbelt, pastikan anda menyatakan kedua-dua nama fail dan pengepala Jenis Kandungan semasa mengisytiharkan medan untuk upload_file. Berikut ialah contoh:

filename = 'my_file.txt'
m = MultipartEncoder(fields={'upload_file': (filename, open(filename, 'rb'))})
r = requests.post(
    url,
    data=m,
    headers={'Content-Type': m.content_type},
    verify=False,
)
print(r.request.headers)  # confirm that the 'Content-Type' header has been set.
Salin selepas log masuk

Menggunakan Permintaan Python/HTTPX

Pilihan lain ialah menggunakan permintaan Python atau perpustakaan HTTPX, yang kedua-duanya boleh mengendalikan muat naik fail penstriman dengan cekap. Berikut ialah contoh untuk setiap satu:

Menggunakan permintaan:

import requests

url = '...'
filename = '...'

with open(filename, 'rb') as file:
    r = requests.post(
        url,
        files={'upload_file': file},
        headers={'Content-Type': 'multipart/form-data'},
    )
Salin selepas log masuk

Menggunakan HTTPX:

import httpx

url = '...'
filename = '...'

with open(filename, 'rb') as file:
    r = httpx.post(
        url,
        files={'upload_file': file},
    )
Salin selepas log masuk

HTTPX secara automatik menyokong muat naik fail penstriman, manakala permintaan memerlukan anda menetapkan pengepala Jenis Kandungan 'multipart/form-data'.

Menggunakan Kaedah FastAPI Stream()

Kaedah .stream() FastAPI membolehkan anda mengelak daripada memuatkan fail besar ke dalam memori dengan mengakses badan permintaan sebagai strim . Untuk menggunakan pendekatan ini, ikuti langkah berikut:

  1. Pasang pustaka data borang-penstriman: Pustaka ini menyediakan penghurai penstriman untuk data berbilang bahagian/bentuk-data.
  2. Buat titik akhir FastAPI: Gunakan kaedah .stream() untuk menghuraikan kandungan permintaan sebagai strim dan gunakan pustaka ing_form_data strim untuk mengendalikan penghuraian berbilang bahagian/data-bentuk.
  3. Daftar Sasaran: Tentukan objek FileTarget dan ValueTarget untuk mengendalikan penghuraian data fail dan borang, masing-masing.

Pengesahan Saiz Fail yang Dimuat Naik

Untuk memastikan saiz fail yang dimuat naik tidak melebihi had yang ditentukan, anda boleh menggunakan MaxSizeValidator. Berikut ialah contoh:

from streaming_form_data import streaming_form_data
from streaming_form_data import MaxSizeValidator

FILE_SIZE_LIMIT = 1024 * 1024 * 1024  # 1 GB

def validate_file_size(chunk: bytes):
    if FILE_SIZE_LIMIT > 0:
        streaming_form_data.validators.MaxSizeValidator( FILE_SIZE_LIMIT). __call__(chunk)
Salin selepas log masuk

Melaksanakan Titik Akhir

Berikut ialah contoh titik akhir yang menggabungkan teknik ini:

from fastapi import FastAPI, File, Request
from fastapi.responses import HTMLResponse
from streaming_form_data.targets import FileTarget, ValueTarget
from streaming_form_data import StreamingFormDataParser

app = FastAPI()

@app.post('/upload')
async def upload(request: Request):
    # Parse the HTTP headers to retrieve the boundary string.
    parser = StreamingFormDataParser(headers=request.headers)

    # Register FileTarget and ValueTarget objects.
    file_ = FileTarget()
    data = ValueTarget()
    parser.register('upload_file', file_)
    parser.register('data', data)

    async for chunk in request.stream():
        parser.data_received(chunk)

    # Validate file size (if necessary)
    validate_file_size(file_.content)

    # Process the uploaded file and data.
    return {'message': 'File uploaded successfully!'}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Muat Naik Fail Besar dengan Cekap (≥3GB) ke Bahagian Belakang FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan