개발 꿀팁/PYTHON

python flask send_file 파일을 업로드하고 jquery.js를 통해 다운로드합니다

Jammie 2022. 12. 6. 14:03
반응형

python flask send_file 파일을 업로드하고 jquery.js를 통해 다운로드합니다
백엔드 라우팅입니다

@app.route("/download_data_file", methods=['GET', 'POST'])
def download_data_file():
"""
브라우저 다운로드 파일 인터페이스입니다
flask의 send_file로 파일을 보냅니다
"""
# 파일 이름 (확장자 포함)
info = json.loads(request.form.get('data'))
filename = info['filename']
filepath = info['filepath']
# # print(filepath)
# 파일 크기입니다
fsize = os.path.getsize(filepath)

response = make_response(send_file(filepath, as_attachment=True))
response.headers["Content-Disposition"] = "attachment; filename={}".format(filename.encode().decode('latin-1'))
response.headers["Content-length"] = fsize
return response

프론트 js입니다

function download_data_btn_func(obj) {
let filename = test.txt;
let filepath = ./test.txt;
let params = {};
params['filepath'] = filepath
params['filename'] = filename
console.log(params)
// 참고: 파일을 다운로드한 ajax는 dataType이 'json'이 아니라고 요청했습니다.그를 제거하면 ajax가 자동으로 dataType 속성 값을 맞춥니다.
$.ajax({
url: '/download_data_file',
type: 'post',
data: { 'data': JSON.stringify(params) },
success: function (result) {
// a 요소를 시뮬레이션하여 파일을 다운로드합니다
let blob = new Blob([result]);
let a = document.createElement('a');
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
},
error: function (result) {
console.log(result)
}
})
}

 

반응형