[Python] File Upload API

정석·2024년 1월 30일

Python

목록 보기
4/5
post-thumbnail

Streamlit을 이용하여 프론트에서 업로드 된 영상을 DB서버에 저장한 후 해당 파일을 AI 서버에서 프로세스가 실행되도록 할 예정이다.

1. 로직

- 업로드 테스트

  • Client Code (Streamlit)
import streamlit as st
import requests

st.title("영상 업로드 테스트")

uploaded_file = st.file_uploader("파일을 선택해주세요.", type=['mp4']

if uploaded_file is not None:
	files = {"file" : uploaded_file.getvalue()}
    response = requests.post("http://localhost:5001/upload", files = files)
    
    if response.ok:
    	st.success("영상이 성공적으로 업로드되었습니다.")
    else:
    	st.error("업로드 실패")
  • Server Code (Flask)
from flask import Flask, request

app = Flas(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
	if 'file' not in request.files:
    	return 'No file', 400
    
    file = request.files['file']
    
    if file.filename== '':
    	return 'No selected file', 400
       
  	if file:
    	print("Received file:", file.filename)
        return 'File recived', 200
        
if __name__ == '__main__':
	app.run(host='0,0,0,0', debug=False, port=5001)

- DB 서버에 저장 추가

@app.route('/upload', methods=['POST'])
def upload_file():
	if 'file' not in request.files:
    	return 'No file', 400
    
    file = request.files['file']
    
    if file.filename== '':
    	return 'No selected file', 400
       
  	if file:
    	file_name = file.filename
        file_data = file.read() # read() 로 읽으면 바이너리로 읽힘
    	try:
        	connection = pymysql.connect(**db_config)
            with connection.cursor() as cursor:
            	sql = "INSERT INTO Streamlit (video_name, video_test) VALUES (%s, %s)"
                cursor.execute(sql, (file_name, file_data))
                connection.commit()
            return 'File successfully uploaded', 200
        except Exception as e:
        	return f'An error occurred: {e}', 500
        finally:
        	connection.close()

0개의 댓글