flask+gunicorn中文文件下载报错问题及解决

导言

问题源起与一个静态文件下载的接口:

from flask import Flask, current_app
app = Flask(__name__)

@app.route('/file_name')
def file_download(file_name):
    return send_from_directory(current_app.root_path, file_name)

当file_name中有中文的时候出现内部错误提示:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 46-47: ordinal not in range(256)

故障排解

查找发现发现是中文编码出了问题,需要对响应头进行设置: 参考

from flask import Flask, current_app,send_from_directory
app = Flask(__name__)


@app.route('/file_name')
def file_download(file_name):
    res = make_response(send_from_directory(current_app.root_path, file_name, as_attachment=True, conditional=True))
    res.headers["Content-Disposition"] = 'attachment; filename*="utf-8\'\'{}"'.format(file_name.encode().decode('latin-1'))
    return res

这下在本地运行终于可以正常下载了。但放到服务器上用gunicorn部署的时候又出现了问题:

Traceback (most recent call last):
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 179, in handle_request
    resp.write_file(respiter)
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 411, in write_file
    if not self.sendfile(respiter):
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 390, in sendfile
    self.send_headers()
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 337, in send_headers
    util.write(self.sock, util.to_bytestring(header_str, "ascii"))
  File "/home/dev/backend/backcode/convert-excel/venv/lib/python3.5/site-packages/gunicorn/util.py", line 509, in to_bytestring
    return value.encode(encoding)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 152-157: ordinal not in range(128)

经过一番查找,又找到了这个网址,参考里面的回答,又将代码改成下面这种形式:

from urllib.parse import quote

from flask import Flask, current_app,send_from_directory

app = Flask(__name__)

@app.route('/file_name')
def file_download(file_name):
    res = make_response(send_from_directory(current_app.root_path, file_name, as_attachment=True, conditional=True))
    res.headers["Content-Disposition"] = 'attachment; filename={}"'.format(quote(file_name))
    return res

这下终于成功下载中文文件名的文件了。

转载于:https://www.cnblogs.com/zhangjpn/p/8762729.html

科研级YOLOv8 Neck革新:BiFPN双向特征金字塔赋能,让多尺度融合更高效的实战指南 在文件夹下新建BiFPN.py,将上述BiFPNLayer和BiFPN类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义Neck模块。 阅读详情

相关推荐

Openclaw Onboarding向导全攻略——如何配置你的第一个AI助手

很多新手在成功运行 `openclaw --version` 后,面对黑底白字的终端就陷入了迷茫:“安装好了,然后呢?” 本篇我们就彻底解决这个问题,带你完整走完 `openclaw onboard` 交互式初始化配置向导的每一步,从“安装完成”到“真正能用”,只差这一个向导的距离。 本文为2026年3月最新版,适配OpenClaw v2026.2.x 稳定版,所有步骤均经过实测验证,可直接落地。

夏日清风 1917

'latin-1' codec can't encode character 的解决方案

分析一个字符串,并更新数据库的时候,出现了如下错误: 'latin-1' codec can't encode character u'\u017e' in position 11: ordinal not in range(256) 进行了一些研究发现,原因是,数据库的编码和数据源的编码不一致,并且包含了不能处理的字符。 有两种方法可用,一个是先预先处理一下字符串,二是设置数据库参

枝寒不栖 4万+

sysrepo 开发者指南(一个基于libyang与支持rpc的数据库)

sysrepo 开发者指南(一个基于libyang与支持rpc的数据库) 日志记录 默认情况下,所有 Sysrepo 日志记录都处于关闭状态。如果启用,日志消息有 3 种输出。它们可以写入stderr、由 处理syslog或简单地传递给回调。 请务必注意,启用 Sysrepo 日志记录也会修改libyang日志记录设置。错误消息被视为标准 Sysrepo 错误,其他严重性较低的消息完全隐藏。要更改此行为,只需在启用 Sysrepo 日志记录后调整libyang日志记录设置。 此外,几乎每个 Sysrepo

weixin_43489394的博客 9229

ERROR 'latin-1' codec can't encode characters in position 81-86: ordinal not in range(256)问题解决

使用pymysql时,出现了编码问题,可以在连接时进行声明: db = pymysql.connect('{}'.format(host), '{}'.format(username), '{}'.format(pwd), '{}'.format(database), use_unicode=True, charset="utf8") ...

legendary_Dragon的博客 859

反激变压器反射电压详解

我以前做过隔离式的POE模块,其电路实际就是个反激式开关电源。只不过其输入电压范围比较低,为44V-57V。 电路如下图,就是个flyback。 可以看到,电路中有个钳位电路,用来抑制电压尖峰,就在初级线圈那里。 问题 抑制尖峰通常有2种电路,一种叫RCD钳位,另外一种是用TVS管+二极管钳位。 这两种实际中都有用,今天我不想讨论它们的区别,只想说明一个问题: 为什么不能只用一个二极管搞定?像继电器电路那样?不也能抑制尖峰吗? 答案自然是不行的...

weixin_42005993的博客 2万+

Windows11配置WSL2支持代理上网

说起来本来这个功能我也不需要的,只是最近突然有个需求就顺便研究了下,WSL2默认的网络方式是NAT,即WSL2的网卡本身是虚拟网卡,通过以太网或WIFI的地址转换来上互联网,我试了下是不能直接走代理的,最近比较忙没具体研究,但是我用另一种方式实现了,下面介绍给需要的人。注意:这个方法只能是WIndows11系统,WIndows10系统上的WSL2缺少了一项功能导致不可用。1、方法总体没什么难度,NAT方式暂时没研究透,后续有时间再研究2、WIndows10系统不支持mirrored,暂时需要另辟蹊径。

jiexijihe945的博客 9591

Flask写接口网页中文显示错误

在网页中原始显示: 加入(加入方法有很多) app.config['JSON_AS_ASCII'] = False 正常情况下加入之后显示中文应该就没问题了,如果还有问题的话,就比如显示 在浏览器页面中点击右键,编码->UTF-8,显示出正确文字 ...

qq_36226810的博客 855

27、自闭症儿童治疗与玩具设计研究

本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。

keras9composer的博客 211

python flask有中文运行报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc5

在flask中,加入了一个函数: #1.修改配置 @app.route('/config') def config(): print('Hello, World 3') return '配置' 运行一下:flask run 居然直接报错了: SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc5 ...

zhuxian2009的专栏 1828

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

Python FastAPI 面试题及参考答案

FastAPI 的路由机制是其核心功能之一,用于将不同的 URL 路径映射到相应的处理函数。通过定义路由,可以构建出功能丰富的 API。在 FastAPI 中,使用装饰器来定义路由。在这个示例中,是一个装饰器,它将根路径"/"的 GET 请求映射到read_root函数。当客户端发送一个 GET 请求到根路径时,FastAPI 会调用read_root函数并返回结果。

大模型大数据攻城狮的专栏 2248

新版Flask app中文乱码,JSON_AS_ASCII不管用的解决方法

app.config['JSON_AS_ASCII'] = False 已经被弃用了,...

我的博客 2029

把 300 亿参数的 Qwen3-30B-A3B 塞进 16GB 手机:MoE、mmap 与内存轮转的完整拆解

这篇文章详细拆解了如何在16GB内存手机上运行305亿参数的Qwen3-30B-A3B大模型。作者通过MoE(专家混合)架构、内存映射(mmap)和专用NPU内存(rpcmem)的巧妙结合实现了这一"不可能"的任务。 核心原理在于:MoE模型将庞大的前馈网络拆分为128个专家,每个词只激活8个专家,97%的权重处于闲置状态;通过mmap技术按需加载当前需要的专家权重;同时利用NPU专用内存高效计算关键部分。三个关键开关(GGML_HEXAGON_MOE_PAGING=1、--mmap、GGML_CPU_RE

q742971636的博客 187

[1269]使用gunicorn部署flask项目

flask 自带的web服务器可用于开发环境运行调试,不适合部署在生产环境,无法满足线上的性能要求。当使用启动时,flask框架会有一段WSGI: 全称是Web Server Gateway Interface(web服务器网关接口),它是一种规范,它是web服务器和web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。uwsgi: 是一种传输协议,用于定义传输信息的类型。uWSGI: 是实现了uwsgi协议WSGI的web服务器。

周小董 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

gunicorn与gevent对flask项目进行部署总结

引言 Flask,webpy,Django都带着 WSGI server,当然性能都不好,自带的web server 更多的是测试用途。线上发布时,则使用高性能的 wsgi server或者是联合nginx做uwsgi 。 greenlet是一个轻量级的协程库。gevent是基于greenlet的网络库。 guincorn是支持wsgi协议的http server,gevent只是它支持的模式之...

submarineas的博客 7741

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

记一次 gunicorn 启动 flask 出问题的经历

出错现象: gunicorn+nginx+flask 部署项目, 部署过程没问题,项目也正常启动了,但是一旦访问接口,就会报错: Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/

Sean_i_x的博客 2774

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

gunicorn启动flask项目的坑

问题描述:项目用的是flask框架,在项目上线的时候,服务器上是使用gunicorn来启动项目的。但是上线之后,发现服务成功启动了,也有正确的返回值,但是没有生成日志,而用python来启动服务的时候,是会生成日志的。 下面是要上线的服务的入口文件server.py的主要代码块: from xxx import app # app = Flask(__name__) if _...

weixin_30242907的博客 4593

Linux部署Flask +Gunicorn+Nginx 及gunicorn启动报错

gunicorn.errors.HaltServer: ##报错,但看不出具体原因。gunicorn -w 4 -b HOST:端口 运行文件名称:Flask程序实例名。# 使用gevent模式,还可以使用sync 模式,默认的是sync模式。# gunicorn 运行模块名:应用名 -c 配置文件。#直接运行,默认启动的127.0.0.1::8000。# 设置守护进程【关闭连接时,程序仍在运行】

走在搬砖的路上! 3636

python之gunicorn的配置

python常见的web部署搭配nginx+gunicorn,下面记录一下gunicorn的配置使用。 安装gunicorn pip install gunicorn gunicorn -h # 查看使用的命令 gunicorn启动一个flask的应用程序 # app.py from flask import Flask def create_app(): app = F...

5453

gunicorn 和 uvicorn部署fastapi 或者flask

使用gunicorn 与uvicorn 多并发部署python后台服务

Magicapprentice的博客 1352

gunicorn 超时报错:[1] [CRITICAL] WORKER TIMEOUT 解决

一. 问题描述 在使用 Gunicorn + flask 搭建的一个 web 项目中,由于使用了机器学习模型,在第一次请求接口的时候需要加载模型,在本地运行的时候加载模型很快所以正常运行,将应用使用 docker 的方式部署到服务器上面(模型是通过 volume 的方式挂载到容器中的), 第一次请求加载模型耗时比较长,报出如下错误: [2021-09-11 07:22:33 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:12) [2021-09-11 07:22:35

惜鸟的博客 2万+

gunicorn 启动flask 失败

gunicorn 启动flask 失败, print("\nError: %s" % str(e), file=sys.stderr) [xxxxxxxx jenkins]$ sudo gunicorn -c gunicorn.py --reload xxxxx:app Traceback (most recent call last): File “/bin/gunicorn”, line 7, in from gunicorn.app.wsgiapp import run File “/usr/lib

dongwuming的专栏 1785

使用gunicorn部署flask服务

为什么要用gunicorn部署flask 当我们以production环境运行flask项目时,通常flask会在控制台打印出一个警告:“WARNING: Do not use the development server in a production enviroment. Use a production WSGI server instead.”什么意思,简单的说就是flask只为我们提...

霹雳吧啦Wz 2074

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Flask+Gunicorn+Nginx】部署目标检测模型API方案

Addery的学习日常 1751

gunicorn + flask 异步方案采坑记录

因为现在大家都在做测试平台,论坛好多后端使用django,flask的测试平台,大部分情况下Python项目服务是使用gunicorn[或者uwsgi]启动,自动化用例的执行难免会用到异步方案,可能大部分用Celery,但Celery太重,偶尔的异步任务,可以使用multiprocessing 或者是concurrent 或者是协程就可以解决,但异步一不小...

xie_0723的博客 1万+

Ubuntu + Nginx + Gunicorn + Flask 部署项目

本文介绍了如何使用Gunicorn和Nginx部署Flask应用的完整流程。首先安装Gunicorn并编写测试程序,然后配置Gunicorn启动参数(包括进程数、IP和端口)。接着安装Nginx并修改配置文件,设置反向代理指向Gunicorn服务。最后通过nginx-t检查配置并重启Nginx服务。文中还解决了常见的WORKER TIMEOUT问题,建议增加--timeout参数延长超时时间。整个部署过程实现了将Flask应用通过Gunicorn和Nginx对外提供服务的目标。

limengshi138392的博客 2851
上一篇: 使用hexo搭建github博客
下一篇: 一点关于"fat model, skinny controller"的思考
dinght2000
博客等级 码龄11年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值