본문 바로가기
Streamlit Wep App

Streamlit을 활용한 파일 업로드 기능 구현하기

by ssury94 2025. 2. 3.

 

Streamlit의 다양한 기능들-

 

Streamlit: Python으로 간편하게 웹 애플리케이션 만들기

데이터 분석이나 머신러닝 모델을 웹 애플리케이션으로 배포하고 싶지만, 복잡한 웹 개발 과정이 부담스럽다면?Streamlit이 정답일 수 있습니다. Python 코드만으로 대화형 웹 애플리케이션을 손쉽

maeilcoding.tistory.com

 

이번 예제에서는 이미지, CSV, PDF 파일을 업로드하고, 해당 파일을 화면에 출력하는 기능을 구현해 보겠습니다.

 

 

 

프로젝트 개요

Streamlit을 이용해 다음 기능을 구현합니다.

  1. 사이드바를 활용한 파일 업로드 기능 제공
  2. 업로드된 파일을 저장 후 사용자에게 알림 제공
  3. 이미지 파일의 경우 화면에 표시
  4. CSV 파일의 경우 데이터프레임 형태로 출력
  5. PDF 파일의 경우 업로드 및 정보 제공

 

 

 

구현 코드

아래는 Streamlit을 활용하여 파일을 업로드하고 저장하는 전체 코드입니다.

import pandas as pd
import streamlit as st
from datetime import datetime
import os

# 선택한 파일을 저장하는 함수
def save_uploadedfile(directory, file):
    # 1. 디렉토리가 없으면 생성
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    # 2. 파일 저장 (이름 변경 없이 저장)
    with open(os.path.join(directory, file.name), 'wb') as f:
        f.write(file.getbuffer())
    
    # 3. 저장 완료 메시지 출력
    st.success(f'저장 완료: {directory}에 {file.name} 저장되었습니다.')

# 메인 함수
def main():
    st.title('파일 업로드 예제')
    
    st.sidebar.title('사이드바')
    menu = ['이미지 파일 업로드', 'CSV 파일 업로드', 'PDF 파일 업로드']
    choice = st.sidebar.selectbox('메뉴를 선택하세요.', menu)
    
    if choice == menu[0]:  # 이미지 파일 업로드
        st.subheader(menu[0])
        file = st.file_uploader('이미지 파일 업로드', type=['png', 'jpg', 'jpeg', 'webp'])
        
        if file is not None:
            new_filename = datetime.now().isoformat().replace(':', '_') + '.jpg'
            file.name = new_filename  # 파일명 변경
            save_uploadedfile('images', file)
            st.image(file, use_container_width=True)
    
    elif choice == menu[1]:  # CSV 파일 업로드
        st.subheader(menu[1])
        file = st.file_uploader('CSV 파일 업로드', type=['csv'])
        
        if file is not None:
            save_uploadedfile('csv', file)
            df = pd.read_csv(file)
            st.dataframe(df)
    
    elif choice == menu[2]:  # PDF 파일 업로드
        st.subheader(menu[2])
        file = st.file_uploader('PDF 파일 업로드', type=['pdf'])
        
        if file is not None:
            save_uploadedfile('pdf', file)
            st.write(file)

if __name__ == '__main__':
    main()

 

 

 

 

 

코드 설명

**1️⃣ 파일 저장 함수 (save_uploadedfile)

  • 파일이 업로드될 디렉토리가 존재하지 않으면 자동으로 생성
  • 업로드된 파일을 해당 디렉토리에 저장
  • 저장 완료 후 사용자에게 성공 메시지 출력

2️⃣ 파일 업로드 및 처리

  • 이미지 파일 (.png, .jpg, .jpeg, .webp): 업로드 후 저장, 화면에 표시
  • CSV 파일 (.csv): 업로드 후 저장, 데이터프레임 형태로 출력
  • PDF 파일 (.pdf): 업로드 후 저장, 업로드된 파일 표시

3️⃣ UI 구성

  • **사이드바 (st.sidebar.selectbox)**를 이용하여 사용자가 업로드할 파일 유형을 선택할 수 있도록 함
  • **파일 업로드 위젯 (st.file_uploader)**을 통해 사용자에게 파일 업로드 기능 제공

 

 

 

실행 방법

위 코드를 app.py로 저장한 후 터미널에서 다음 명령어를 실행하면 Streamlit 앱이 실행됩니다.

streamlit run app.py

이제 웹 브라우저에서 파일을 업로드하고 처리하는 기능을 직접 확인할 수 있습니다.

 

pdf 파일을 보려면 별도의 전용 라이브러리가 필요하다.

 

 

 

마무리

이번 포스팅에서는 Streamlit을 활용하여 파일 업로드 기능을 구현하는 방법을 알아보았습니다. Streamlit의 강력한 기능을 활용하면 웹 애플리케이션을 쉽고 빠르게 개발할 수 있습니다.