관리 메뉴

솜씨좋은장씨

[FastAPI] Base64 형식으로 파일을 요청 받고 활용하는 방법 (Python) 본문

Programming/Python

[FastAPI] Base64 형식으로 파일을 요청 받고 활용하는 방법 (Python)

솜씨좋은장씨 2021. 9. 27. 01:35
728x90
반응형

이번에 API 개발을 진행하면서 

base64형식으로 인코딩한 pdf파일을 request에 포함시켜 API 요청으로 받아 이를 활용하여 하는 작업이 있었습니다.

 

이번 글에서는 FastAPI에서 base64 형태로 인코딩된 값을 input으로 받고 

이 값을 활용는 방법에 대해서 적어보려합니다.

 

먼저 BaseModel을 상속하여 request와 response 형식을 지정하는 class를 만들어 줍니다.

from pydantic import BaseModel

class Base64Request(BaseModel):
    base64_file: str
    
class Base64Response(BaseModel):
    response_code: str
    response_message: str

이 형식으로 요청을 받은 base64파일을 활용하는 API를 작성합니다.

import base64

@app.post("/base64file", response_model=Base64Response)
async def use_base64file(request: Base64Request):
    file_content = request.base64_file
    
    base64_content = base64.encode(file_content)
    
    use_content(content=base64_content)
    
    response = Base64Response(
                    response_code="200",
                    response_message="OK"
    ).dict()
    
    return response

request로 받은 파일은 base64.encode를 통해 base64 형식으로 바꾼 다음 활용하면 됩니다.

그럼 이 API 에 요청값은 어떻게 만드느냐!

from base64 import b64encode
import requests
import json

with open(f"./file_path/{file_name}", 'rb') as file:
	file_content = b64encode(file.read())
    
base64_file = file_content.decode('utf-8')

base64_request = {
    "base64_file": base64_file
}

def request_function(url, data):
    url_req = requests.post(url=url, data=json.dumps(data))
    
    return url_req.text

위와 같이 파일을 open 한 뒤 해당 파일의 값을 base64 값으로 인코딩 하고 이를 utf-8로 디코딩 한 값을

request에 넘겨주면 됩니다.

Comments