【问题标题】:File read in multipart post in cherrypy is always empty在cherrypy的多部分帖子中读取的文件始终为空
【发布时间】:2021-05-29 12:34:48
【问题描述】:

我在读取作为多部分 POST 请求的一部分发送到cherrypy 服务器的文件内容时遇到问题。我正在使用 Python 的“请求”模块来创建请求。发送的文件内容在cherrypy中解析时始终为空,尽管长度被报告为非零。

服务器的 Python 版本:3.6.8

cherrypy 版本:18.6.0

请求版本:2.18.4

请求是通过

response = requests.post(<url>, files={'file': open('slask.txt', 'rb')}, data={'name': 'some_name'}, verify=False)

其中&lt;url&gt; 是服务器的有效网址。

slask.txt 是读取b'slask \r\n' 时读取open('slask.txt', 'rb').read() 的文件

cherrypy 服务器的代码:

import os
import io
import cherrypy

cherrypy.server.socket_host = '<url>'

class ServerExample():
    @cherrypy.expose
    def index(self):
        return "Cherrypy server to manage something ..."
                                                                                             
    @cherrypy.expose
    def upload(self, *args, **kwargs):                                                                                                                            
        image = cherrypy.request.params['file']
        print(image.filename)
        print(image.fp.fp.rfile)
        print(image.fp.fp.remaining)
        print(image.fp.length)
        print(image.read())
        print(cherrypy.request.params['name'])
        
        return "parsed file..."

cherrypy.quickstart(ServerExample())

服务器的响应是200 "parsed file..."

服务器的输出是:

Image filename: slask.txt
Underlying data object: <cheroot.makefile.StreamReader name=5>
Value of field 'remaining' in underlying data object: 0
Image length: 247
Image content: b''
Contents of multipart data field 'name': some name
<obfuscated> - - [27/Feb/2021:10:20:50] "POST /upload HTTP/1.1" 200 15 "" "python-requests/2.18.4"

可以看出,请求的字段已经到位。然而,Part 对象的read() 方法会产生一个空结果,尽管它的length247。奇怪的是底层数据对象有remaining字节0虽然没有读取任何字节。

通过向http://ptsv2.com 发出完全相同的请求,已对请求本身进行了独立验证,其中可以显示它包含所有预期信息。

我应该如何读出变量image的文件内容?

【问题讨论】:

标签: python python-3.x http-post httprequest cherrypy


【解决方案1】:

正如问题的 cmets 中所指出的,访问与上传部分关联的二进制数据的方法是通过 cherrypy.request.params['key'].file.read()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多