尝试使用GData API将图片从Google App Engine上传到Picasa时出现TypeError

时间:2009-11-11 14:38:24

标签: python google-app-engine gdata-api typeerror picasa

我正在尝试编写一个小工具,将图片从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

任何想法? : - )

1 个答案:

答案 0 :(得分:5)

此问题的解决方案是使用StringIO: - )

http://docs.python.org/library/stringio.html

添加

pic = StringIO.StringIO(pic)

将urlfetch中的result.content转换为gdata期望的文件格式。