首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cherrypy中的多部分post中读取的文件始终为空

cherrypy中的多部分post中读取的文件始终为空
EN

Stack Overflow用户
提问于 2021-02-27 17:53:12
回答 1查看 44关注 0票数 0

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

服务器端Python版本: 3.6.8

cherrypy版本: 18.6.0

请求版本: 2.18.4

该请求是通过

代码语言:javascript
复制
response = requests.post(<url>, files={'file': open('slask.txt', 'rb')}, data={'name': 'some_name'}, verify=False)

其中<url>是到服务器的有效url。

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

cherrypy服务器的代码:

代码语言:javascript
复制
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..."

服务器的输出为:

代码语言:javascript
复制
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对象的length247,但它的read()方法产生了一个空结果。奇怪的是,底层数据对象具有remaining字节0,尽管没有读取任何字节。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-04 05:04:54

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66397506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档