Flask를 사용하여 파일 다운로드

Salman Mehmood 2022년8월18일
Flask를 사용하여 파일 다운로드

이 설명을 통해 Flask의 send_file 기능을 사용하여 파일을 첨부 파일로 다운로드하는 다운로드 가능한 링크를 만드는 방법을 배웁니다.

Flask의 send_file 기능을 사용하여 파일을 첨부 파일로 다운로드

Flask Framework에서는 PDF, JPEG, MP3 또는 기타 파일과 같은 모든 종류의 파일을 다운로드하도록 파일 다운로더를 만들 수 있지만 논리는 일정하게 유지됩니다. 이제 텍스트 편집기로 이동하여 PNG 파일이 있는 동일한 디렉토리에 간단한 app.py 파일을 생성하기만 하면 됩니다.

이제 템플릿 폴더도 생성해야 하며 그 안에 index.html 파일을 생성하면 됩니다. 이제 우선 Flask 라이브러리를 가져와야 합니다.

필요한 라이브러리와 send_file 라이브러리만 있으면 됩니다.

from flask import Flask, render_template, send_file

app 변수를 만들고 __name__ 속성을 사용하여 Flask 애플리케이션을 초기화해야 합니다. 이제 메인 함수를 초기화하고 이 블록 내에서 run 기능을 호출하고 debugTrue와 같도록 전달하면 변경 사항이 있을 때마다 애플리케이션이 다시 시작됩니다.

app = Flask(__name__)

if __name__ == "__main__":
    app.run(debug=True)

HTML 파일을 로드하기 위한 라우트와 함수를 생성해야 합니다. 이를 위해 /인 홈 경로를 만들고 이 경로에 도달하면 Main_Page()가 될 함수를 호출합니다.

이 함수는 render_template()을 반환합니다. 이 안에 index.html 파일을 전달하고 index.html 파일에 저장된 템플릿을 로드합니다.

@app.route("/")
def Main_Page():
    return render_template("index.html")

이제 다운로드한 파일을 저장할 기본 템플릿을 작성합니다.

몇 개의 태그만 사용할 것입니다. 첫 번째 태그는 제목을 포함하는 <h2> 태그이고, 두 번째 태그는 단락 태그인 <p> 태그입니다. 이 태그 내에서 앵커 태그를 사용하고 href 속성은 url_for인 속성과 같으며 이름을 전달합니다.

<h2>Downloqad this file</h2>
<p> <a href="{{url_for('Download_File')}}">Download</a></p>

이 애플리케이션을 실행하고 localhost 5000을 열면 Download_File 엔드포인트에 대한 URL을 빌드할 수 없다는 메시지가 표시됩니다.

Flask 다운로드 파일 출력 1

url_for('Download_File') 구문은 다운로드 파일을 찾고 있으므로 이를 수행하기 위해 get 요청만 하면 됩니다.

이제 다른 경로 /download를 생성합니다. 그리고 url_for() 속성에 지정한 것과 같은 이름으로 함수를 생성합니다.

이제 파일의 경로를 지정해야 하므로 PATH가 될 변수를 만들고 이 변수 ​​안에 경로를 저장합니다.

두 개의 매개변수를 사용하는 send_file() 함수를 사용하여 파일을 반환합니다. 첫 번째는 경로이고 두 번째는 as_attachmentTrue와 같습니다. 다운로드 가능한 파일을 첨부 파일로 만들기를 원하기 때문입니다.

@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    send_file(PATH, as_attachment=True)

페이지를 저장하고 새로 고치면 하이퍼링크로 변환된 것을 볼 수 있으며 이 링크를 클릭하여 파일을 다운로드할 수 있습니다.

Flask 다운로드 파일 출력 2

완전한 파이썬 코드:

from flask import Flask, render_template, send_file

app = Flask(__name__)


@app.route("/")
def Main_Page():
    return render_template("index.html")


@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    return send_file(PATH, as_attachment=True)


if __name__ == "__main__":
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Flask File