>  기사  >  백엔드 개발  >  FastAPI에서 파일 업로드 및 처리를 구현하는 방법

FastAPI에서 파일 업로드 및 처리를 구현하는 방법

WBOY
WBOY원래의
2023-07-28 15:01:074055검색

FastAPI에서 파일 업로드 및 처리를 구현하는 방법

FastAPI는 사용하기 쉽고 강력한 최신 고성능 웹 프레임워크로 파일 업로드 및 처리를 기본적으로 지원합니다. 이 기사에서는 FastAPI 프레임워크에서 파일 업로드 및 처리 기능을 구현하는 방법을 알아보고 특정 구현 단계를 설명하는 코드 예제를 제공합니다.

먼저 필요한 라이브러리와 모듈을 가져와야 합니다.

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

다음으로 FastAPI 애플리케이션 인스턴스를 만들어야 합니다.

app = FastAPI()

이제 파일 업로드 요청을 수락하고 파일을 서버에 저장하는 경로를 정의할 수 있습니다. :

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

위 코드에서는 file 유형의 매개변수를 받는 POST 요청 경로 /upload/를 정의합니다. 이 매개변수는 UploadFile이며 File 함수를 사용하여 요청 본문의 파일로 구문 분석합니다. File 함수의 첫 번째 매개변수는 파일 유형의 기본값입니다. ...는 이 매개변수를 전달해야 함을 의미하며, 그렇지 않으면 오류 응답이 반환됩니다. 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

파일 업로드 요청을 처리할 때 먼저 with open 메서드를 사용하여 파일 쓰기 스트림을 만든 다음 shutil.copyfileobj 함수를 사용하여 파일을 복사합니다. 요청 본문 개체가 서버에 복사됩니다.

파일이 성공적으로 업로드되면 성공 메시지가 포함된 JSON 응답이 반환됩니다. 파일 업로드 중에 예외가 발생하면 오류 정보가 포함된 JSON 응답이 반환되고 응답 상태 코드가 500으로 설정됩니다.

파일 업로드 기능이 구현된 후에도 계속해서 파일 처리 기능을 구현할 수 있습니다. 다음은 업로드된 이미지 파일을 허용하고 이를 썸네일로 변환하는 경로 예입니다. 🎜rrreee🎜 위의 예제 코드에서는 동일한 파일 업로드 프로세스를 사용한 다음 이미지 처리 논리로 이동합니다. 여기서는 시뮬레이션을 사용하여 이미지 파일을 처리하고, 썸네일을 생성하고, 썸네일 다운로드 링크를 클라이언트에 반환합니다. 🎜🎜마지막으로 다운로드 기능을 제공하는 경로를 정의할 수도 있습니다. 🎜rrreee🎜위 코드에서는 GET 요청 경로 /download/{filename}를 정의합니다. 이 경로는 파일 이름 매개변수 filename을 받아들이고 파일의 다운로드 링크를 반환합니다. 🎜🎜이 시점에서 FastAPI 프레임워크에서 파일 업로드 및 처리 기능을 구현했습니다. 위의 샘플 코드를 통해 FastAPI에서 파일 업로드 및 처리를 처리하는 기본 프로세스와 FastAPID의 API 및 메소드를 사용하여 이러한 기능을 구현하는 방법을 이해할 수 있습니다. 물론, 특정 파일 처리 로직은 실제 필요에 따라 맞춤화될 수 있습니다. 🎜🎜FastAPI에서 파일 업로드 및 처리 기능을 구현하는 방법을 이해하는 데 이 글이 도움이 되기를 바랍니다! 🎜

위 내용은 FastAPI에서 파일 업로드 및 처리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.