我有一个由String
和BlobReferenceProperty
组成的实体:
class NameKeyPair(db.Model):
human_readable_name = db.StringProperty()
blobkey = blobstore.BlobReferenceProperty()
当我在blob中保存一些文本时,我设置了这样的blobkey:
...
#Create the file
file_name = files.blobstore.create(mime_type='text/plain')
#Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(data.encode('utf8'))
#Finalize the file
files.finalize(file_name)
#Get the file's blob key
blobkey = files.blobstore.get_blob_key(file_name)
#store it in DB
nameKeyPair = NameKeyPair()
nameKeyPair.blobkey = blobkey
nameKeyPair.human_readable_name = human_readable_name
nameKeyPair.put()
...
human_readable_name
是我发送给用户的字符串。现在,当用户将名称发回给我时,我想返回blob的文本:
...
human_readable_name = self.request.get('human_readable_name')
q = NameKeyPair.all()
q.filter("human_readable_name =", human_readable_name)
blobkey = ""
for p in q.run(limit=1):
blobkey = p.blobkey
blob_info = blobstore.BlobInfo.get(blobkey)
self.send_blob(blob_info)
这不起作用。 Appspot只是说“服务器错误。”
如果我打印出我的变量blobkey
,它会说<google.appengine.ext.blobstore.blobstore.BlobInfo object at 0x54dbe8bfa91b53a0>
它不应该是一个blobkey吗?
此页面:https://developers.google.com/appengine/docs/python/blobstore/blobkeyclass说“您可以通过将密钥传递给BlobInfo.get()类方法来使用BlobKey获取BlobInfo实体。”
这就是我将我的blobkey传递给BlobInfo.get
的原因。但是,如果我的“blobkey”实际上已经是BlobInfo
对象,那么我可能不需要这样做。我尝试将其直接传递给send_blob
:
self.send_blob(blobkey)
但我得到的结果相同。
基于此页面:https://developers.google.com/appengine/docs/python/blobstore/显示代码示例:self.send_blob(blob_info)
看起来应该是我需要的所有内容......但它只是不起作用。有任何想法吗?
答案 0 :(得分:0)
我无法评论,但尝试使用[object] .key()我发现它有点迟钝是关键字是一个对象,什么时候是一个字符串