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
기능을 호출하고 debug
가 True
와 같도록 전달하면 변경 사항이 있을 때마다 애플리케이션이 다시 시작됩니다.
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을 빌드할 수 없다는 메시지가 표시됩니다.
url_for('Download_File')
구문은 다운로드 파일을 찾고 있으므로 이를 수행하기 위해 get 요청만 하면 됩니다.
이제 다른 경로 /download
를 생성합니다. 그리고 url_for()
속성에 지정한 것과 같은 이름으로 함수를 생성합니다.
이제 파일의 경로를 지정해야 하므로 PATH
가 될 변수를 만들고 이 변수 안에 경로를 저장합니다.
두 개의 매개변수를 사용하는 send_file()
함수를 사용하여 파일을 반환합니다. 첫 번째는 경로이고 두 번째는 as_attachment
가 True
와 같습니다. 다운로드 가능한 파일을 첨부 파일로 만들기를 원하기 때문입니다.
@app.route("/download")
def Download_File():
PATH = "Flask-logo.png"
send_file(PATH, as_attachment=True)
페이지를 저장하고 새로 고치면 하이퍼링크로 변환된 것을 볼 수 있으며 이 링크를 클릭하여 파일을 다운로드할 수 있습니다.
완전한 파이썬 코드:
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)
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