调用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,狗都不用,气死我了!😠


  • ☁️ 我的CSDN:https://blog.csdn.net/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,神秘暗号:为干饭而来

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

posted @ 2025-03-28 10:00  李英俊小朋友  阅读(23)  评论(0)    收藏  举报