gpt4 book ai didi

python - flask 下载文件

转载 作者:IT老高 更新时间:2023-10-28 21:49:35 29 4
gpt4 key购买 nike

我正在尝试使用 Flask 创建一个网络应用程序,该应用程序允许用户上传文件并将其提供给其他用户。现在,我可以正确地将文件上传到 upload_folder。但我似乎找不到让用户下载回来的方法。

我将文件名的名称存储到数据库中。

我有一个 View 服务于数据库对象。我也可以删除它们。

@app.route('/dashboard', methods=['GET', 'POST'])
def dashboard():

problemes = Probleme.query.all()

if 'user' not in session:
return redirect(url_for('login'))

if request.method == 'POST':
delete = Probleme.query.filter_by(id=request.form['del_button']).first()
db.session.delete(delete)
db.session.commit()
return redirect(url_for('dashboard'))

return render_template('dashboard.html', problemes=problemes)

在我的 HTML 中,我有:

<td><a href="{{ url_for('download', filename=probleme.facture) }}">Facture</a></td>

和下载 View :

@app.route('/uploads/<path:filename>', methods=['GET', 'POST'])
def download(filename):
return send_from_directory(directory=app.config['UPLOAD_FOLDER'], filename=filename)

但它正在返回:

Not Found

在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。

我只想将文件名链接到对象并让用户下载它(对于同一 View 中的每个对象)

最佳答案

您需要确保传递给 directory 参数的值是绝对路径,并针对应用程序的 当前 位置进行了更正。

最好的方法是将 UPLOAD_FOLDER 配置为相对路径(没有前导斜杠),然后通过添加 current_app.root_path 使其成为绝对路径:

@app.route('/uploads/<path:filename>', methods=['GET', 'POST'])
def download(filename):
uploads = os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER'])
return send_from_directory(directory=uploads, filename=filename)

重要的是重申 UPLOAD_FOLDER 必须是相对的才能工作,例如不以 / 开头。

相对路径可以工作,但过于依赖当前工作目录设置为您的 Flask 代码所在的位置。情况可能并非总是如此。

关于python - flask 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com