如何用Flask提供CSV文件并在网页显示而非自动下载?
Flask端点返回CSV内容在网页直接显示而非自动下载的解决方案
方法一:直接读取文件内容并返回文本响应
跳过send_file的默认处理逻辑,手动构建响应头确保内容内联显示:
@app.route("/csv") def get_csv(): with open('data.csv', 'r', encoding='utf-8') as f: csv_content = f.read() # 返回内容、状态码和自定义响应头 return csv_content, 200, { 'Content-Type': 'text/plain; charset=utf-8', 'Content-Disposition': 'inline' }
方法二:修改send_file的参数配置
如果坚持使用send_file,需要覆盖默认的MIME类型和响应头:
@app.route("/csv") def get_csv(): return send_file( 'data.csv', mimetype='text/plain', # 让浏览器识别为普通文本 as_attachment=False, download_name=None, # 不指定下载文件名 headers={'Content-Disposition': 'inline'} # 强制内联显示 )
关键说明
- Content-Type设置:使用
text/plain而非text/csv,因为部分浏览器会默认对text/csv类型触发下载行为;指定编码确保中文等特殊字符显示正常。 - Content-Disposition:明确设置为
inline,告诉浏览器直接在页面内显示内容,而不是作为附件下载。 - 若仍出现下载,可检查浏览器是否有强制下载CSV的扩展或默认设置,可尝试在隐私模式下测试。
内容的提问来源于stack exchange,提问作者Anchey Peng
相关产品推荐
相关产品推荐

