0

GAE Blobstoreを使用して、画像ファイルをWebアプリにアップロードし始めました。私はこれらのリソースをチュートリアルとして使用しています。

http://blog.notdot.net/2010/03/Implementing-a-dropbox-service-with-the-Blobstore-API-Part-1 http://blueimp.github.com/jQuery-File-Upload/

以下の私のコードでは、blobがデータストアにアップロードされます。okとblob情報を取得することもできます。ただし、可変遅延(おそらく5分以上)の後、blob情報を読み取ろうとすると、EntityNotFoundErrorsが発生し始めます。BLOBおよびUserFileデータは、引き続き_ah / admin/datastoreインターフェースに表示されます。

私はblobstoreを使って開発するのが初めてなので、blobstore.BlobReferencePropertyを使用しても大丈夫かどうか疑問に思っていました。

アドバイスをよろしくお願いします、

ブライアン

次のデータ構造を使用して、ユーザーレコードをBLOBにリンクします。

class UserFile(db.Model):
  user = db.StringProperty(required=True)
  blob_key = blobstore.BlobReferenceProperty(required=True)

私は次のようにBLOBをDBに書き込みます(ユーザー名はself.get_usernameから取得されます):

def write_blob(self, data, info):
        blob = files.blobstore.create(
            mime_type=info['type'],
            _blobinfo_uploaded_filename=info['name']
        )
        with files.open(blob, 'a') as f:
            f.write(data)
        files.finalize(blob)

        # Add a userfile entry for this blob
        key =  files.blobstore.get_blob_key(blob)
        userFile = UserFile(blob_key = key, user = self.get_username()) 
        userFile.put()

最後に、次のようにblob情報を取得します。

 def get_userFileTable(self):
    username = self.get_username()
    userfiles = db.GqlQuery("SELECT * "
                            "FROM UserFile "
                            "WHERE user = :1",username)

    for userfile in userfiles:
        filename = userfile.blob_key.filename

最後の行は、EntityNotFoundErrorがスローされる場所です

File "\scripts\filemanager\upload_handler.py", line 188, in get_userFileTable filename = userfile.blob_key.filename
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\blobstore\blobstore.py", line 179, in filename return self.__get_value('filename')
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\blobstore\blobstore.py", line 243, in __get_value
self.kind(), str(self.__key), namespace=''))
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 628, in Get
return GetAsync(keys, **kwargs).get_result()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 592, in get_result
return self.__get_result_hook(self)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\datastore\datastore_rpc.py", line 1467, in __get_hook
entities = rpc.user_data(entities)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 597, in local_extra_hook
raise datastore_errors.EntityNotFoundError()
EntityNotFoundError

Windows7マシンでAppEngine開発サーバー1.6.5を使用しています。

4

1 に答える 1

0

SDK管理コンソールを見ると:エンティティが表示されていますか?または、-clearフラグで始まるすべてのSDKのエンティティをクリアしますか?

于 2012-05-12T17:52:05.280 に答える