BlobInfo对象的md5_hash属性有什么用途?

1 投票
3 回答
608 浏览
提问于 2025-04-17 07:06

如果我调用

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

加密哈希函数可以用来做很多事情:

  • 提供一个完整性检查值,用来检测文件或数据是否被修改过
  • 为文件或数据提供一个独特的标识符,以便引用其内容
  • 加快查找哈希表中内容的速度
  • 快速搜索重复的文件
  • 等等

当然,这些“预期”的用途取决于你正在支持的应用程序,比如你是在构建购物车、数据缓存,还是地图-归约处理应用,或者其他什么呢?

撰写回答