[ 작업 환경 ]

Python 3.7.5

Flask 1.1.1

Werkzeug 0.16.0

 

 

해당 실습은 예시일 뿐이니 참고하여 적절한 커스터마이징 후 사용하시면 됩니다.

 

 [ 해당 실습 목표 ]

 - 이미지 파일 업로드하여 지정한 위치에 저장 및 업로드 횟수에 따라 DB 수치 조정

 - 업로드된 파일 확장명 jpg 통일화

 - 미리보기용(저용량용) 파일로 변환하여 추가 저장

 

 

 

1. upload html 페이지 작성

파일을 업로드할 수 있는 버튼 설정 및 안내 문구, 업로드 제출 버튼 생성

<!-- vim app001/templates/upload.html -->

{% extends 'layout.html' %}

{% block title %}Upload{% endblock %}

{% block content %}
<h2>Upload Test Page : {{ id }}</h2>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div>
        파일 업로드!
    </div>
    <form action="{{ url_for('upload') }}" method = "POST"
    enctype = "multipart/form-data">
    <input type = 'file' name = 'file' />
    <input type = 'submit'/>
    </form>
</body>
</html>

{% endblock %}

 

 

 

2. app config ['UPLOAD_FOLDER'] 위치 설정 생성

mkdir -p /img_files/original
# vim app001/__init__.py

# ...

app.config['UPLOAD_FOLDER'] = '/img_files/original'

# ...

 

 

 

3. upload route 설정

 ▷ /img_files/original/ 안에 업로드된 파일들을 저장합니다.

# vim app001/routes.py

# ...

# file upload
@app.route('/upload', methods = ['GET', 'POST'])
def upload():
    msg = 'Input what you want to upload'
    if request.method == 'POST' and 'file' in request.files:
        f = request.files['file']
        filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        #return 'uploads dir -> file upload success!'
        return redirect(url_for('home'))
    msg = 'FAIL'
    #return redirect(url_for('upload'))
    return render_template('upload.html', id=msg)

 

 

 

4. layout 수정

Img_Upload 버튼 생성 및 활성화해줍니다.

<!-- vim app001/templates/layout.html -->

<!-- ... -->

                <nav class="navtop">
                        <div>
                                <h1>Website Title</h1>
                                <a href="{{ url_for('home') }}"><i class="fas fa-home"></i>Home</a>
                                <a href="{{ url_for('profile') }}"><i class="fas fa-user-circle"></i>Profile</a>
                                <a href="{{ url_for('upload') }}"><i class="fas fa-user-circle"></i>Img_Upload</a>
                                <a href="{{ url_for('logout') }}"><i class="fas fa-sign-out-alt"></i>Logout</a>
                        </div>
                </nav>

<!-- ... -->

 

 

 

5. 정상 적용 확인

 

 - GET 요청을 하거나 업로드 파일이 없을때 FAIL

 

 - UPLOAD SUCCESS

app001/__init__.py 안에 아래의 설정이 있기 때문에
app.config['UPLOAD_FOLDER'] = '/img_files/original'

확인해보면, 해당 경로로 업로드 성공된 파일이 저장됨을 확인할 수 있습니다.

업로드 성공시 home page가 redirect 되도록 설정하여 Home Page로 이동됩니다.

 

 

 

+ Recent posts