我正在尝试使用Flask创建一个Web应用程序,该应用程序允许用户上传文件并将其提供给其他用户。现在,我可以将文件正确地上传到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。如果您手动输入网址,请检查拼写,然后重试。
我只想将文件名链接到对象,然后让用户下载(对于同一视图中的每个对象)
你需要确保传递给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代码所在的位置。并非总是如此。
我试图用PythonAnywhere和Flask编写一个非常简单的webapp,它允许用户上传文本文件,生成csv文件,然后让用户下载csv文件。不一定要花哨,只要管用就行了。我已经编写了从驱动器上的txt文件生成csv的程序。 现在,我的函数用以下命令打开驱动器上的文件:
我创建了一个web应用程序,它允许其用户从运行应用程序的同一服务器下载文件。然而,我不能让它按照我希望的方式工作,现在我甚至不确定这是否可能。
问题内容: 我目前正在使用一个小型Web界面,该界面允许不同的用户上传文件,转换他们已上传的文件以及下载转换后的文件。对于我的问题,转换的细节并不重要。 我目前正在使用flask-uploads管理上传的文件,并将它们存储在文件系统中。用户上传并转换文件后,会有各种各样漂亮的按钮可以删除该文件,因此上载文件夹不会被填满。 我认为这不是理想的选择。我真正想要的是在下载文件后立即将其删除。我希望在会话
问题内容: 我试图允许用户下载包含其操作定义的数据的CSV文件。该文件不存在,它是动态创建的。如何在Flask中做到这一点? 问题答案: 使用生成数据并传输响应。使用写入内存缓冲区,而不是生成中间文件。 如果该generate函数需要从current中获取信息request,则应使用修饰stream_with_context,否则您将收到“在外部请求上下文中工作”错误。其他所有内容保持不变。
我刚开始使用Flask/Python。我想要实现的是,我在HTML中有一个下载按钮,它调用以下函数: 不完整的烧瓶代码是:
我试图允许用户下载一个CSV文件,其中包含由其操作定义的数据。该文件不存在,它是动态创建的。我怎么能在烧瓶里做这个?