我剛開始使用GAE Blobstore將圖像文件上傳到網絡應用程序。我一直在使用這些資源教程:如何在用戶表中使用GAE blobstore? (EntityNotFoundError)
http://blog.notdot.net/2010/03/Implementing-a-dropbox-service-with-the-Blobstore-API-Part-1 http://blueimp.github.com/jQuery-File-Upload/
在我的代碼下面BLOB將上傳到數據存儲的確定,我也可以檢索blob信息。然而,在可變延遲(也許5min +)之後,當我嘗試讀取blob信息時,我開始獲取EntityNotFoundErrors。 blob和UserFile數據仍然出現在_ah/admin/datastore界面中。
由於我是新開發blobstore,我想知道如果我使用blobstore.BlobReferenceProperty是好的?
預先感謝任何建議,
布賴恩
我用下面的數據結構,用戶記錄鏈接到斑點:
class UserFile(db.Model):
user = db.StringProperty(required=True)
blob_key = blobstore.BlobReferenceProperty(required=True)
我寫這樣的斑點的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
我使用App Engine開發服務器1.6.5在Windows 7機器上。
感謝您的回覆voscausa,是的,我可以在管理控制檯中看到實體和用戶條目。我也嘗試了管理控制檯終端中的getUserFileTable代碼,並得到相同的結果。我不關閉測試之間的AppEngineLauncher,也得到我期望從GQLQuery得到的結果數量,只是blob_key.filename引用給出了EntityNotFoundError – brif
我沒有看到錯誤,也許用戶對象發生了變化。你有沒有嘗試部署它,也許這是一個SDK問題。 – voscausa
嗨voscausa,感謝檢查代碼是正確的。我發現什麼是錯的 - 我很傻!我使用的jquery演示代碼有一個函數,可以在設定的時間後刪除所有blob條目,以避免填滿blobstore。我認爲這是我如何使用錯誤的blobstore,並沒有正確檢查演示代碼(很快)。您對我的代碼的驗證幫助我意識到這是其他事情,所以我標記了您的答案正確。再次感謝。 – brif