Maison  >  Article  >  développement back-end  >  Comment implémenter le téléchargement et le traitement de fichiers dans FastAPI

Comment implémenter le téléchargement et le traitement de fichiers dans FastAPI

WBOY
WBOYoriginal
2023-07-28 15:01:073961parcourir

Comment implémenter le téléchargement et le traitement de fichiers dans FastAPI

FastAPI est un framework Web moderne et performant, facile à utiliser et puissant. Il fournit une prise en charge native du téléchargement et du traitement de fichiers. Dans cet article, nous apprendrons comment implémenter les fonctions de téléchargement et de traitement de fichiers dans le framework FastAPI, et fournirons des exemples de code pour illustrer les étapes de mise en œuvre spécifiques.

Tout d'abord, nous devons importer les bibliothèques et modules requis :

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

Ensuite, nous devons créer une instance d'application FastAPI :

app = FastAPI()

Maintenant, nous pouvons définir un itinéraire pour accepter les demandes de téléchargement de fichiers et enregistrer le fichier sur le serveur. :

@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)

Dans le code ci-dessus, nous définissons une route de requête POST /upload/, qui reçoit un paramètre nommé file , le type de ce paramètre est UploadFile, nous utilisons la fonction File pour l'analyser en tant que fichier dans le corps de la requête. Le premier paramètre de la fonction Fichier est la valeur par défaut du type de fichier ... signifie que ce paramètre doit être passé, sinon une réponse d'erreur sera renvoyée. 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

Lors du traitement d'une demande de téléchargement de fichier, nous utilisons d'abord la méthode with open pour créer un flux d'écriture de fichier, puis utilisons la fonction shutil.copyfileobj pour copier le fichier dans le corps de la requête L'objet est copié sur le serveur.

Lorsque le fichier est téléchargé avec succès, nous renvoyons une réponse JSON contenant un message de réussite ; si une exception se produit lors du téléchargement du fichier, nous renverrons une réponse JSON contenant des informations d'erreur et définirons le code d'état de la réponse sur 500.

Une fois la fonction de téléchargement de fichiers implémentée, nous pouvons continuer à implémenter la fonction de traitement de fichiers. Voici un exemple d'itinéraire qui accepte les fichiers image téléchargés et les convertit en vignettes : 🎜rrreee🎜 Dans l'exemple de code ci-dessus, nous utilisons le même processus de téléchargement de fichiers, puis passons à la logique du traitement des images. Ici, nous utilisons la simulation pour traiter les fichiers image, générer des vignettes et renvoyer le lien de téléchargement des vignettes au client. 🎜🎜Enfin, nous pouvons également définir une route pour fournir la fonction de téléchargement : 🎜rrreee🎜Dans le code ci-dessus, nous définissons une route de requête GET /download/{filename}, cette route accepte un paramètre de nom de fichier filename et renvoie le lien de téléchargement du fichier. 🎜🎜À ce stade, nous avons implémenté la fonction de téléchargement et de traitement de fichiers dans le framework FastAPI. Grâce à l'exemple de code ci-dessus, nous pouvons comprendre le processus de base de gestion du téléchargement et du traitement des fichiers dans FastAPI, ainsi que comment utiliser l'API et les méthodes de FastAPID pour implémenter ces fonctions. Bien entendu, la logique spécifique de traitement des fichiers peut être personnalisée en fonction des besoins réels. 🎜🎜J'espère que cet article vous aidera à comprendre comment implémenter les fonctions de téléchargement et de traitement de fichiers dans FastAPI ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn