替换urllib2的二进制模式文件对象

2024-09-30 04:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码是这样的,它在本地的工作方式是一样的(不使用任何AppEngine):

bodyParams = { "file" : open( filePath, "rb" )  }
request = urllib2.Request( requestUrl, None, self.buildAuthInfo() )
response = self.getOpener().open(request, bodyParams).read()

我想去掉open,也就是open( filePath, "rb" ),因为在Google AppEngine中禁止使用文件(或者非常不方便)。在

为了解决这个问题,我得到了一个base64编码图像文件的httppost数据,并对其进行了解码。我使用以下命令通过cURL发送编码数据:

^{pr2}$

encoded是base64编码的jpg。在

此时,我尝试了两种不同的方法:将解码后的数据放入StringIO对象,或者直接在bodyParams = { "file" : DECODEDVALUE}内传递和使用。我希望这两种方法中的任何一种都能正常工作,但是我从目标服务器收到了一个http500错误(我正在执行一个外部API请求)。这是我如何解码值:

img = self.request.get('image')
DECODEDVALUE = MyStringIO(base64.b64decode(img))

我想我有一个与编码和/或二进制模式有关的问题。我想我有一个与编码和/或二进制模式有关的问题。在

我怎样才能摆脱open和文件对象的使用,转而使用StringIOBytesIO或{}对象?在


注:仅供澄清,与原问题无关。MyStringIOStringIO.StringIO的子类,添加了__len__

class MyStringIO(StringIO.StringIO):
  def __len__(self):
    return self.len


Tags: 对象self编码lenrequestopen解码file

热门问题