调用aiohttp上传文件中文名出现乱码

调用aiohttp上传文件中文名出现乱码

我不会设置仅粉丝可见,不需要你关注我,仅仅希望我的踩坑经验能帮到你。如果有帮助,麻烦点个 👍 吧,这会让我创作动力+1 😁

  • 摘要

    老老实实用aiohttp、用FormData,用 data.add_field 给文件加名字,然后用发post异步请求,发现服务器上收到的文件名是类似 %E4%BD%A0%E5%A5%BD 的URL编码,给我急的啊。关键是,postman调用没问题啊!

  • 结论

    老样子先说结论:用 httpx,别用垃圾 aiohttp,迎刃而解,真的,信我。

  • 思路

    • 为了解决这个问题,我卡卡狂搜,包括且不限于

      • urllib.parse.quote 给文件名保护住
      • 手动构建 Content-Dispositioncontent_disposition = f'form-data; name="file"; filename="{quote(filename)}"; filename*="UTF-8\'\'{quote(filename)}"'
      • 疯狂改 content_type
      • 等等,但就是不好使
    • 当然百度、bing、google、github、stackflow我直接狂搜,就是搜不到,怎么回事,这个世界没人能解决了吗。发现了以下两个方案:

      1. requests 曾经出现过同样的问题,但是新版解决了,参考链接

        在这里插入图片描述

      2. 还有一个说请求侧解决不了,要去服务器解决的,有点搞笑。。。

    • 当然aiohttp文档狂看,依然解决不了

    • 总的来说,问题的核心是:Non-ASCll filename uploads don't comply with RFC 7578,类似这样的问题。

    • 然后我突发奇想,试试 httpx,好使了好使了!🎉,可恶啊,笨比 aiohttp,狗都不用,气死我了!😠


  • ☁️ 我的优快云:https://blog.youkuaiyun.com/qq_21579045
  • ❄️ 我的博客园:https://www.cnblogs.com/lyjun/
  • ☀️ 我的Github:https://github.com/TinyHandsome
  • 🌈 我的bilibili:https://space.bilibili.com/8182822
  • 🍅 我的知乎:https://www.zhihu.com/people/lyjun_
  • 🐧 粉丝交流群:1060163543,神秘暗号:为干饭而来

碌碌谋生,谋其所爱。🌊 @李英俊小朋友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李英俊小朋友

没事啦!白嫖不要紧啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值