BlobInfo对象的md5_hash属性有什么用途?
如果我调用
blobsotre.BlobInfo.properties()
这个函数会返回
set(['filename', 'creation', 'content_type', 'md5_hash', 'size'])
但是如果我调用
a = blobstore.BlobInfo.all()
obj = a.fetch(1)[0]
print obj.md5_hash
这个函数就会抛出一个异常
AttributeError(name) AttributeError: md5_hash
BlobInfo 对象的 md5_hash 属性是用来干什么的?
附注:我想检查上传的文件是否不存在于 Blobstore 中。
3 个回答
1
你可能有一些 BlobInfo 对象,它们没有写入 md5_hash,包括通过 blobstore.BlobInfo.all()
返回的第一个结果。
你可以在开发服务器的交互式控制台中轻松检查:
from google.appengine.ext import blobstore
query1 = blobstore.BlobInfo.all()
query2 = blobstore.BlobInfo.gql("WHERE md5_hash != ''")
print query1.count(), query2.count()
# for me this returns '100 85'
1
你给出的代码在我这边运行得很好,使用的是 shell.appspot.com:
>>> from google.appengine.ext import blobstore
>>> blobstore.BlobInfo.properties()
set(['filename', 'creation', 'content_type', 'md5_hash', 'size'])
>>> o = blobstore.BlobInfo.all().get()
>>> o.md5_hash
u'5d41402abc4b2a76b9719d911017c592'
你一定是做了一些和你示例代码不一样的事情。能不能把你具体的代码和完整的错误信息贴出来?
1
加密哈希函数可以用来做很多事情:
- 提供一个完整性检查值,用来检测文件或数据是否被修改过
- 为文件或数据提供一个独特的标识符,以便引用其内容
- 加快查找哈希表中内容的速度
- 快速搜索重复的文件
- 等等
当然,这些“预期”的用途取决于你正在支持的应用程序,比如你是在构建购物车、数据缓存,还是地图-归约处理应用,或者其他什么呢?