CherryPy接收Multipart POST请求时文件内容读取为空的问题咨询
解决CherryPy中Multipart上传文件内容为空的问题
看起来你碰到了CherryPy处理multipart文件上传时的一个常见小坑——虽然文件长度显示正常,但调用read()却返回空字节,这是因为文件流的指针已经被移动到末尾了。
问题原因
CherryPy在解析multipart/form-data请求时,会先读取部分流内容来解析表单结构,这就导致你拿到image对象时,它的底层文件指针已经指向了文件末尾,所以直接read()自然读不到内容。你输出的remaining: 0也佐证了这一点——底层流已经被读完了。
解决方案
只需要在读取文件内容前,将文件指针重置到开头即可。修改你的服务器代码如下:
@cherrypy.expose def upload(self, *args, **kwargs): image = cherrypy.request.params['file'] print(image.filename) # 关键步骤:将文件指针移到流的起始位置 image.fp.seek(0) content = image.read() print(f"Image content: {content}") # 现在应该能输出b'slask \r\n'了 print(cherrypy.request.params['name']) return "parsed file..."
额外说明
CherryPy返回的image是cherrypy._cpreqbody.UploadedFile类型,它的fp属性是一个类文件对象,支持标准的seek()和read()操作。通过seek(0)重置指针后,就能正常读取到完整的文件内容了。
你之前用第三方服务验证请求没问题,说明请求本身是正确的,问题完全出在服务器端的流指针处理上,这个修改应该能解决你的问题。
内容的提问来源于stack exchange,提问作者marcks
相关产品推荐
相关产品推荐

