1 python2
# -*- codeing:utf-8 -*-
import os
from urllib import quote
from flask import Flask, make_response, send_from_directory
import mimetypes
app = Flask(__name__)
@app.route("/")
def index():
return "hello world"
@app.route("/file-download")
def file_download():
file_path = os.path.join(os.getcwd(), "测试.txt")
directory, filename = os.path.split(file_path) # python2 中 fiename必须是str类型[utf-8编码],不能是unicode类型
# response = make_response(send_from_directory(directory, filename, as_attachment=True)) # 方法1
with open(file_path, 'r') as f:
data = f.read()
response = make_response(data) # 方法2
mime_type = mimetypes.guess_type(filename)[0]
response.headers['Content-Type'] = mime_type
filename = quote(filename)
response.headers["Content-Disposition"] = "attachment; filename={0}; filename*=utf-8''{1}".format(
filename, filename)
return response
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=80)
2 python3
python3中只需要将python2 中 from urllib import quote
改为 from urllib.parse import quote
。
3 下载文件中文文件名乱码
response.headers["Content-Disposition"] = "attachment; filename={0}; filename*=utf-8''{1}".format(
filename, filename)