【发布时间】:2014-08-25 23:21:28
【问题描述】:
我正在尝试使用 Flask 创建一个网络应用程序,该应用程序允许用户上传文件并将其提供给其他用户。现在,我可以正确地将文件上传到 upload_folder。但我似乎找不到让用户下载回来的方法。
我将文件名的名称存储到数据库中。
我有一个视图服务于数据库对象。我也可以删除它们。
@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>
和下载视图:
@app.route('/uploads/<path:filename>', methods=['GET', 'POST'])
def download(filename):
return send_from_directory(directory=app.config['UPLOAD_FOLDER'], filename=filename)
但它正在返回:
找不到
在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。
我只想将文件名链接到对象并让用户下载它(对于同一视图中的每个对象)
【问题讨论】:
-
Flask 对于什么 URL 会返回 404 Not Found 响应?您是否验证了相关文件名确实位于
app.config['UPLOAD_FOLDER']中? -
确实如此,因为我有一个确实上传文件的上传表单。我就是不能下载。上传到文件夹没问题。网址是:127.0.0.1:5000/uploads/rsc_chapitre17.pdf,文件确实存在!
-
我问的原因是因为
send_from_directory()会在没有文件时引发NotFound。所以os.path.isfile(app.config['UPLOAD_FOLDER']/filename)返回了错误。您需要仔细检查UPLOAD_FOLDER的内容并确认您尝试加载的文件名真的在那里。 -
它在那里,将 app = Flask(name) 更改为 app = Flask(name, static_folder='uploads') 并且出于某些原因它奏效了。
-
Python 可以很好地处理斜杠。 前导斜线是这里的问题。您定义了绝对路径,而不是相对路径。
标签: python flask download flask-sqlalchemy