Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk melaksanakan muat naik dan pemprosesan fail dalam FastAPI

Bagaimana untuk melaksanakan muat naik dan pemprosesan fail dalam FastAPI

WBOY
WBOYasal
2023-07-28 15:01:074116semak imbas

Cara melaksanakan muat naik dan pemprosesan fail dalam FastAPI

FastAPI ialah rangka kerja web moden berprestasi tinggi yang mudah digunakan dan berkuasa Ia menyediakan sokongan asli untuk memuat naik dan memproses fail. Dalam artikel ini, kami akan mempelajari cara melaksanakan fungsi muat naik dan pemprosesan fail dalam rangka kerja FastAPI dan menyediakan contoh kod untuk menggambarkan langkah pelaksanaan tertentu.

Pertama, kita perlu mengimport perpustakaan dan modul yang diperlukan:

from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
import shutil
import os

Seterusnya, kita perlu mencipta contoh aplikasi FastAPI:

app = FastAPI()

Kini, kita boleh menentukan laluan untuk menerima permintaan muat naik fail dan menyimpan fail ke pelayan :

@app.post("/upload/")
async def create_upload_file(file: UploadFile = File(...)):
    try:
        # 保存文件到服务器上
        with open(file.filename, "wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        
        # 返回成功的响应
        return JSONResponse({"message": "File uploaded successfully"})
    except Exception as e:
        # 返回失败的响应
        return JSONResponse({"error": str(e)}, status_code=500)

Dalam kod di atas, kami mentakrifkan laluan permintaan POST /upload/, yang menerima parameter bernama file , jenis parameter ini ialah UploadFile, kami menggunakan fungsi Fail untuk menghuraikannya sebagai fail dalam badan permintaan. Parameter pertama fungsi Fail ialah nilai lalai bagi jenis fail ... bermakna parameter ini mesti dihantar, jika tidak, respons ralat akan dikembalikan. POST 请求路由 /upload/,它接收一个名为 file 的参数,该参数的类型是 UploadFile,我们使用 File 函数将其作为请求体中的文件进行解析。File 函数的第一个参数是文件类型的默认值,... 表示必须传递该参数,否则将会返回错误响应。

在处理文件上传请求时,我们先使用 with open 的方式创建一个文件的写入流,然后通过 shutil.copyfileobj 函数将请求体中的文件对象复制到服务器上。

当文件上传成功后,我们返回一个包含成功消息的JSON响应;如果文件上传过程中出现任何异常,我们将返回一个包含错误信息的JSON响应并设置响应状态码为500。

在文件上传功能已经实现后,我们可以继续实现文件处理功能。以下是一个示例路由,用于接受上传的图片文件,并将图片文件转换为缩略图:

@app.post("/process_image/")
async def process_image(file: UploadFile = File(...)):
    try:
        # 保存文件到服务器上
        with open(file.filename, "wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        
        # 进行图片处理,生成缩略图
        thumbnail_filename = f"thumbnail_{file.filename}"
        # 模拟图片处理过程
        # 请根据实际需求进行实现
        # ...
        
        # 返回缩略图的下载链接
        return JSONResponse({"thumbnail_url": f"/download/{thumbnail_filename}"})
    except Exception as e:
        # 返回失败的响应
        return JSONResponse({"error": str(e)}, status_code=500)

在上面的示例代码中,我们使用了相同的文件上传过程,然后进入图片处理的逻辑。在这里,我们使用模拟的方式来处理图片文件,生成缩略图,并将缩略图的下载链接返回给客户端。

最后,我们还可以定义一个路由来提供下载功能:

@app.get("/download/{filename}")
async def download_file(filename: str):
    try:
        # 返回文件下载链接
        return JSONResponse({"download_url": f"/file/{filename}"})
        
    except Exception as e:
        # 返回失败的响应
        return JSONResponse({"error": str(e)}, status_code=500)

在上面的代码中,我们定义了一个 GET 请求路由 /download/{filename},该路由接受一个文件名参数 filename

Apabila memproses permintaan muat naik fail, kami mula-mula menggunakan kaedah dengan terbuka untuk mencipta aliran penulisan fail, dan kemudian menggunakan fungsi shutil.copyfileobj untuk menyalin fail dalam badan permintaan Objek disalin ke pelayan.

Apabila fail berjaya dimuat naik, kami mengembalikan respons JSON yang mengandungi mesej kejayaan jika sebarang pengecualian berlaku semasa muat naik fail, kami akan mengembalikan respons JSON yang mengandungi maklumat ralat dan menetapkan kod status respons kepada 500.

Selepas fungsi muat naik fail dilaksanakan, kita boleh terus melaksanakan fungsi pemprosesan fail. Berikut ialah contoh laluan yang menerima fail imej yang dimuat naik dan menukar fail imej kepada imej kecil: 🎜rrreee🎜 Dalam kod contoh di atas, kami menggunakan proses muat naik fail yang sama dan kemudian beralih ke logik pemprosesan imej. Di sini, kami menggunakan simulasi untuk memproses fail imej, menjana lakaran kenit dan mengembalikan pautan muat turun lakaran kenit kepada klien. 🎜🎜Akhir sekali, kami juga boleh menentukan laluan untuk menyediakan fungsi muat turun: 🎜rrreee🎜Dalam kod di atas, kami mentakrifkan laluan permintaan DAPAT /download/{filename}, laluan ini menerima parameter nama fail filename dan mengembalikan pautan muat turun fail. 🎜🎜Pada ketika ini, kami telah melaksanakan fungsi muat naik dan pemprosesan fail dalam rangka kerja FastAPI. Melalui kod sampel di atas, kami boleh memahami proses asas pengendalian muat naik dan pemprosesan fail dalam FastAPI, dan cara menggunakan API dan kaedah FastAPID untuk melaksanakan fungsi ini. Sudah tentu, logik pemprosesan fail tertentu boleh disesuaikan mengikut keperluan sebenar. 🎜🎜Saya harap artikel ini akan membantu anda memahami cara melaksanakan fungsi muat naik dan pemprosesan fail dalam FastAPI! 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan muat naik dan pemprosesan fail dalam FastAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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