我正在尝试编写一个小工具,将图片从Google App Engine上传到Picasa。获取图像有效,但是当我尝试上传它时,我得到错误“ TypeError:stat()参数1必须是(没有空字节的编码字符串),而不是str ”
守则基本上如下:
def getfile(url):
result = urlfetch.fetch(url)
if result.status_code == 200:
return (result.content)
logging.error ("[-] Error fetching URL: %s" % url)
def uploadpicture(comment,pic):
album_url = '/data/feed/api/user/%s/album/%s' % (username, album)
fname = "image.jpg"
entry = gd_client.InsertPhotoSimple(album_url, fname, comment, pic, content_type='image/jpeg')
picurl = "http://brilliantleap.com/blog/frog.jpg"
pic = getfile(picurl)
comment = "Test"
uploadpicture(comment, pic)
完整的Stacktrace是:
追踪(最近一次呼叫最后一次):
文件“/home/birt/stuff/google/appengine/ext/webapp/init.py”,第507行,致电 handler.get(*基团)
文件“/home/birt/stuff/app_picasaupload/main.py”,第124行,获取 uploadpicture(评论,图片)
文件“/home/birt/stuff/app_picasaupload/main.py”,第104行,在uploadpicture中 entry = gd_client.InsertPhotoSimple(album_url,fname,comment,pic,content_type ='image / jpeg')
在InsertPhotoSimple中输入文件“/home/birt/stuff/app_picasaupload/gdata/photos/service.py”,第469行 CONTENT_TYPE)
文件“/home/birt/stuff/app_picasaupload/gdata/photos/service.py”,第398行,在InsertPhoto中 os.path.exists(filename_or_handle):#it是文件名
文件“/usr/lib/python2.5/posixpath.py”,第171行,存在 st = os.stat(path)
文件“/home/birt/stuff/google/appengine/tools/dev_appserver.py”,第1109行,致电 如果不是FakeFile.IsFileAccessible(路径):
文件“/home/birt/stuff/google/appengine/tools/dev_appserver.py”,第1018行,在IsFileAccessible中 normcase = normcase)
在_IsFileAccessibleNoCache中输入文件“/home/birt/stuff/google/appengine/tools/dev_appserver.py”,第1036行 如果os.path.isdir(logical_filename):
文件“/usr/lib/python2.5/posixpath.py”,第195行,位于isdir st = os.stat(path)
TypeError:stat()参数1必须是(没有NULL字节的编码字符串),而不是str
任何想法? : - )
答案 0 :(得分:5)
此问题的解决方案是使用StringIO: - )
(http://docs.python.org/library/stringio.html)
添加
pic = StringIO.StringIO(pic)
将urlfetch中的result.content转换为gdata期望的文件格式。