Flask Download a File
我正在尝试使用Flask创建一个Web应用程序,该应用程序允许用户上传文件并将其提供给其他用户。 现在,我可以将文件正确上传到upload_folder了。 但是我似乎找不到找到让用户下载回来的方法。
我将文件名的名称存储到数据库中。
我有一个为数据库对象服务的视图。 我也可以删除它们。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @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中,我有:
1 | <td>Facture</td> |
和下载视图:
1 2 3 | @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。 如果您手动输入网址,请检查拼写,然后重试。
我只想将文件名链接到对象,然后让用户下载(对于同一视图中的每个对象)
您需要确保传递给
最好的方法是将
1 2 3 4 | @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) |
重要的是重申
相对路径可能有效,但在很大程度上取决于将当前工作目录设置为Flask代码所在的位置。 并非总是如此。
To download file on flask call. File name is Examples.pdf
When I am hitting 127.0.0.1:5000/download it should get
download.
例:
1 2 3 4 5 6 7 8 9 10 11 12 | from flask import Flask from flask import send_file app = Flask(__name__) @app.route('/download') def downloadFile (): #For windows you need to use drive name [ex: F:/Example.pdf] path ="/Examples.pdf" return send_file(path, as_attachment=True) if __name__ == '__main__': app.run(port=5000,debug=True) |
我也在开发类似的应用程序。 即使文件在那里,我也一直找不到错误。 这解决了我的问题。 我在" static_folder"中提到了我的下载文件夹:
1 | app = Flask(__name__,static_folder='pdf') |
我的下载代码如下:
1 2 3 | @app.route('/pdf/<path:filename>', methods=['GET', 'POST']) def download(filename): return send_from_directory(directory='pdf', filename=filename) |
这就是我从html调用文件的方式。
1 2 | Download pdf Download png |