파일 업로드 구현
- templates 디렉토리 생성
-
upload.html 작성 : 사용자가 파일을 업로드할 수 있도록 HTML 폼을 만듦
- 저장할 디렉토리 생성
- 파일 업로드를 처리할 Flask뷰 함수 작성
app.config
: Flask의 내장 객체로 애플리케이션의 구성을 위한 변수들을 저장하는 데 사용.
딕셔너리 형태의 객체를 통해 애플리케이션 설정을 동적으로 조정할 수 있으며,
예를 들어 데이터베이스 설정, 애플리케이션 비밀 키, 파일 업로드 관련 설정 등을 포함할 수 있다.
- 파일 업로드 폼을 반환하는 뷰
return render_template('upload.html')
: templates 디렉토리 내에 위치한 upload.html 템플릿 파일을 렌더링하여 클라이언트에게 보여줌 - 파일 업로드 처리하는 뷰
secure_filename(file.filename)
: 업로드된 파일의 이름을 가져와서 안전한 파일 이름으로 변환. 파일 시스템에서 문제를 일으킬 수 있는 문자를 제거하거나 변환한다.
os.path.join(...)
: 파이썬의 os 모듈에 포함된 함수로, 주어진 경로들을 적절한 경로 구분자로 결합하여 운영 체제에 맞는 전체 경로를 생성함.
운영 체제 간의 호환성을 보장하며, 경로를 수동으로 결합할 때 발생할 수 있는 오류를 방지한다.filename
: 안전하게 처리된 업로드 파일 이름
🌿 추가해야 할 기능 : 파일 종류 검증
파일 시스템에 이미지 저장 & 파일 경로를 데이터베이스에 저장하기
- MySQL 작성
CREATE DATABASE IF NOT EXISTS imagedata; USE imagedata; CREATE TABLE IF NOT EXISTS images ( id INT AUTO_INCREMENT PRIMARY KEY, file_path VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
pip3 install mysql-connector-python
: mysql-connector-python패키지 설치 후 import
- 데이터베이스 연결 설정
db = mysql.connector.connect( host="127.0.0.1", user="root", password="123456789", database="imagedata" ) cursor = db.cursor()
- 데이터베이스에 파일 경로 저장
def upload_file() if file:문에 아래와 같이 추가cursor.execute("INSERT INTO images (file_path) VALUES (%s)", (file_path,)) db.commit()
웹 개발에서 뷰(View)란
MVC(Model-View-Controller) 또는 MTV(Model-Template-View) 패턴의 일부로 사용되는 용어.
애플리케이션의 구조를 조직화하는 데 도움을 주며, 각 부분이 서로의 역할을 분명히 하도록 한다.