2

Google App Engine から Picasa に写真をアップロードするための小さなツールを作成しようとしています。画像のフェッチは機能しますが、アップロードしようとすると「TypeError: stat() argument 1 must be (encoded string without NULL bytes), not 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)

完全なスタックトレースは次のとおりです。

トレースバック (最新の呼び出しが最後):

ファイル "/home/birt/stuff/google/appengine/ext/webapp/ init .py"、507 行目、call handler.get(*groups)内

ファイル "/home/birt/stuff/app_picasaupload/main.py"、124 行目、get uploadpicture(comment, pic)

ファイル「/home/birt/stuff/app_picasaupload/main.py」、104 行目、uploadpicture エントリ = gd_client.InsertPhotoSimple(album_url, fname, comment, pic, content_type='image/jpeg')

ファイル「/home/birt/stuff/app_picasaupload/gdata/photos/service.py」、469 行目、InsertPhotoSimple content_type 内)

File "/home/birt/stuff/app_picasaupload/gdata/photos/service.py", line 398, in InsertPhoto os.path.exists(filename_or_handle): # ファイル名です

ファイル "/usr/lib/python2.5/posixpath.py"、171 行目、exists st = os.stat(path)

ファイル "/home/birt/stuff/google/appengine/tools/dev_appserver.py"、1109 行目、 FakeFile.IsFileAccessible(path) でない場合の呼び出し:

ファイル「/home/birt/stuff/google/appengine/tools/dev_appserver.py」、行 1018、IsFileAccessible normcase=normcase)

ファイル「/home/birt/stuff/google/appengine/tools/dev_appserver.py」の 1036 行目、_IsFileAccessibleNoCache の os.path.isdir(logical_filename) の場合:

ファイル "/usr/lib/python2.5/posixpath.py"、195 行目、isdir st = os.stat(path) 内

TypeError: stat() 引数 1 は、str ではなく (NULL バイトのないエンコードされた文字列) でなければなりません

何か案は ?:-)

4

1 に答える 1

5

この問題の解決策は、StringIOを使用することでした:-)

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

追加する

pic = StringIO.StringIO(pic)

result.contentをurlfetchからgdataが期待するファイルのような形式に変換します。

于 2009-11-12T20:07:55.550 に答える