`
phyeas
  • 浏览: 164208 次
  • 性别: 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

    Polygon3-3.0.9.1-cp39-cp39-win_amd64.zip

    这条命令会告诉pip安装指定的whl文件,一旦安装成功,你就可以在Python环境中导入并使用Polygon3模块了。 Polygon3模块的核心功能包括但不限于以下几点: 1. **几何对象的创建**:可以创建点、线段、平面、多边形...

    Polygon3-3.0.9.1-cp37-cp37m-win_amd64.zip

    7. **性能优化**:由于其底层实现通常用C++编写,因此在处理大量几何数据时,Polygon3通常能提供良好的性能。 "使用说明.txt"文件可能包含了关于如何利用Polygon3库的详细指导,包括安装后的初始化、对象创建、常用...

    Python库 | tencentcloud-sdk-python-cdn-3.0.403.tar.gz

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

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

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

    sonar-scanner-cli-3.0.3.778-windows.zip

    在安装和使用"sonar-scanner-cli-3.0.3.778-windows.zip"时,首先需要解压文件,你会得到一个包含"sonar"文件的目录。这个目录中可能包含以下关键文件: 1. `bin` 目录:这个目录包含了不同操作系统平台下的可执行...

    Polygon3-3.0.9.1-cp38-cp38-win_amd64.zip

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

    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系统

    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库 | 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库 | tencentcloud_sdk_python-3.0.300-py2.py3-none-any.whl

    在实际开发中,Tencentcloud SDK Python还提供了异常处理、请求重试、日志记录等功能,帮助开发者构建健壮的应用。同时,其API设计遵循RESTful原则,易于理解和使用。 总的来说,Tencentcloud SDK Python是连接...

    Python库 | tencentcloud-sdk-python-cwp-3.0.486.tar.gz

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

    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库" 强调了这个资源是...

    Redis-x64-3.0.504

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

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

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

    Python库 | xquant_python-3.0.290-cp36-none-win_amd64.whl

    资源分类:Python库 所属语言:Python 资源全名:xquant_python-3.0.290-cp36-none-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics