`
phyeas
  • 浏览: 164686 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在Python3.0中处理web请求7-文件上传(使用cgi.FieldStorage)

阅读更多

 

    winput=env["wsgi.input"]
    params=cgi.FieldStorage(fp=io.StringIO(winput.read(int(env.get("CONTENT_LENGTH","0"))).decode("ISO-8859-1")),environ=env,keep_blank_values=1)
    print(params["file"].name)
    print(params["file"].filename.encode("ISO-8859-1").decode("UTF-8"))
    print(params["file"].value.encode("ISO-8859-1"))
params=cgi.FieldStorage(fp=io.StringIO(winput.read(int(env.get("CONTENT_LENGTH","0"))).decode("ISO-8859-1")),environ=env,keep_blank_values=1)

 这句代码有必要解释一下:

1、不能直接用winput。如果直接使用wsgi.input,readline出来的都是bytes,而在cgi.FieldStorage里判断全部用的是字符串,在bytes隐式转换为str时会自动加b'',导致判断不成功,知道最后一条readline语句,服务器一直等待输入。。

2、必须使用decode对wsgi.input读取的数据进行解码,不能用str(),原因同上

3、FieldStorage解释完成后得到的value是字符串,如果你上传的是图片或者其他二进制数据,就要再将字符串encode成bytes

4、在上面的代码中filename被FieldStorage解释完毕后是被decode成ISO-8859-1编码的字符串,如果存在中文,就必须用encode再decode

总结:

  FieldStorage里的代码好象还是2.x时候的代码,没有考虑到wsgi.input获取到的是bytes的情况。自己处理编码确实很麻烦。哪位仁兄写个增强版的出来请告诉我。

分享到:
评论

相关推荐

    Polygon3-3.0.9.1-cp39-cp39-win-amd64.whl

    Polygon3-3.0.9.1-cp39-cp39-win_amd64.whl python模块名称:Polygon3 文件格式:whl 安装方式:切换到whl路径,执行pip install Polygon3-3.0.9.1-cp39-cp39-win_amd64.whl

    Python库 | gm-3.0.0.14-py3-none-win32.whl

    python库。 资源全名:gm-3.0.0.14-py3-none-win32.whl

    Polygon3-3.0.9.1-cp36-cp36m-linux-aarch64.zip

    综上所述,Polygon3-3.0.9.1-cp36-cp36m-linux_aarch64.zip是一个专为Python 3.6和Linux aarch64系统设计的图形处理库,其提供的强大功能和高效性能,使得开发者在处理三维几何问题时有了得力的工具。无论是进行科学...

    Python库 | tencentcloud-sdk-python-3.0.122.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-3.0.122.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    audit-3.0-5.se.07.ky10.aarch64.rpm

    审计系统在IT领域中扮演着至关重要的角色,它能记录系统中的各种活动,帮助管理员检测潜在的安全威胁、合规性问题以及性能瓶颈。 审计系统的核心组件是auditd服务,它负责收集和处理来自内核的审计事件。"audit-3.0...

    tensorrt-8.2.3.0-cp38-none-win_amd64.zip

    tensorrt 8.2.3.0版本 python库安装 whl文件,安装只需要切换到对应whl目录然后执行pip install [whl文件名],注意cp表示python版本,比如cp38表示是python3.8的环境,amd64表示是windows x64系统

    Polygon3-3.0.9.1-cp38-cp38-win_amd64.zip

    这样,pip会自动处理文件并将其安装到你的Python环境的site-packages目录下,使得其他Python脚本能够导入并使用Polygon3模块。 在压缩包中,除了主的.whl文件外,还有一个名为"使用说明.txt"的文档。这通常包含关于...

    wxPython3.0-win64-3.0.2.0-py27(64位系统安装包)

    安装完成后,开发者可以在 Python 脚本中导入 wx 模块开始使用 wxPython。 **基本使用示例** ```python import wx app = wx.App() frame = wx.Frame(None, title='Hello wxPython') frame.Show(True) app....

    Python库 | websockets-3.0-py33.py34.py35-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:websockets-3.0-py33.py34.py35-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Redis-x64-3.0.504.msi.zip

    - 为了在生产环境中使用,还需要了解如何与其他应用程序集成,例如通过连接池和适配器与编程语言如Java、Python或C#通信。 6. **管理和监控Redis**: - Redis服务器可以通过`INFO`命令提供详细的运行状态信息。 ...

    Python库 | cryptography-3.0-cp35-cp35m-win_amd64.whl

    当你下载并安装这个`.whl`文件时,Python的`pip`工具可以快速地将库及其依赖项安装到你的环境中,无需编译源代码,这在某些环境中(比如没有正确构建工具的环境)尤其有用。 **Python库的使用** `cryptography`库...

    Python库 | tencentcloud-sdk-python-ecm-3.0.311.tar.gz

    《Python库 Tencentcloud-sdk-python-ecm-3.0.311详解》 在Python编程领域,库的使用是提升开发效率的关键。Tencentcloud-sdk-python-ecm-3.0.311是一个专门为Python开发者设计的腾讯云SDK,它提供了与腾讯云边缘...

    Redis-x64-3.0.504 MSI ZIP

    4. **多语言支持**:Redis提供了丰富的客户端库,包括Python、Java、C#、PHP、Node.js等,方便开发者在各种语言环境中使用。 5. **事务**:Redis支持事务功能,允许用户一次性执行多个命令,保证命令的原子性。 6....

    Python库 | gm-3.0.0.28-py2-none-win_amd64.whl

    资源全名:gm-3.0.0.28-py2-none-win_amd64.whl" 暗示了该文件是一个可以解压并直接在Python环境中使用的库。一旦安装,它将为Python项目提供特定的功能或服务。 标签 "python 开发语言 Python库" 强调了这个资源是...

    mediapipe-0.9.3.0-cp38-cp38-win-amd64.whl

    mediapipe-0.9.3.0-cp38-cp38-win-amd64.whl

    Python库 | tencentcloud-sdk-python-tia-3.0.270.tar.gz

    它提供了丰富的API,使得开发者能够轻松地在Python环境中使用TIA的各项功能,包括模型部署、推理请求、性能优化等。版本3.0.270是对该SDK的一次更新,可能包含了新的特性和性能改进,以满足不断发展的AI需求。 二、...

    PyPI 官网下载 | cryptography-3.0-cp38-cp38-win_amd64.whl

    资源来自pypi官网。 资源全名:cryptography-3.0-cp38-cp38-win_amd64.whl

    Redis-x64-3.0.504

    总的来说,Redis-x64-3.0.504是一个在Windows上易于部署和使用的高效键值存储系统,它的多数据结构、高速性能、丰富的功能和良好的扩展性,使其成为许多开发人员和企业的首选数据存储方案。正确理解和运用Redis的...

    python-iniparse-0.3.1-2.1.el6.noarch.rpm

    python-iniparse-0.3.1-2.1.el6.noarch.rpm

Global site tag (gtag.js) - Google Analytics