Java 为什么在GAE上部署应用程序时,数据存储中没有创建名为_BlobInfo_的实体类型?

Java 为什么在GAE上部署应用程序时,数据存储中没有创建名为_BlobInfo_的实体类型?,java,google-app-engine,google-cloud-datastore,blobstore,Java,Google App Engine,Google Cloud Datastore,Blobstore,当我们将文件上传到Google App Engine上的Blobstore时,我们发现每次上传都会创建一个类型为\u BlobInfo\u的实体,可以在本地开发控制台的数据存储查看器下看到该实体http://localhost:8888/_ah/admin,然而,在将应用程序部署到appengine之后,当我们将文件上载到Blobstore时,不会创建这样的实体。这对我来说很奇怪,我想知道我是否遗漏了什么 \u BlobInfo\u不是一个特殊的名称,很可能您的应用程序不会创建具有此名称的实体

当我们将文件上传到Google App Engine上的Blobstore时,我们发现每次上传都会创建一个类型为
\u BlobInfo\u
的实体,可以在本地开发控制台的
数据存储查看器下看到该实体http://localhost:8888/_ah/admin
,然而,在将应用程序部署到appengine之后,当我们将文件上载到Blobstore时,不会创建这样的实体。这对我来说很奇怪,我想知道我是否遗漏了什么

\u BlobInfo\u
不是一个特殊的名称,很可能您的应用程序不会创建具有此名称的实体

在生产环境中,
\uu BlobInfo\uu
是一个内部名称,用于存储有关存储在Blobstore中的blob的信息。请注意,单词
BlobInfo
前后有两个下划线字符(
)。仅当应用程序创建blob并将其保存到Blobstore中时,才会创建此实体

由于这是一个内部实体,因此默认情况下,它将从数据存储查看器中排除。它也被排除在数据存储统计页面之外,但它们显示为“所有实体”下的
BlobInfo

通过使用一个小技巧,您还可以显示
\uuuu BlobInfo\uuuu
实体的详细统计信息:从下拉列表中选择任何实体,在页面重新加载后,在url中将参数
kind=XXX
修改为
kind=\uu BlobInfo\uu
,然后按enter键。现在,页面将重新加载,显示此项的统计信息,即使它从下拉列表中隐藏

但是,您可以列出这些实体。例如,转到管理控制台的数据存储查看器,并选中“BYGQL”,这样您就可以输入GQL来列出您的实体。现在输入以下GQL查询:

SELECT * FROM __BlobInfo__
这将列出您的
BlobInfo
实体

请注意,您的管理控制台的Blob Viewer页面还根据存储在名称
\uuuu BlobInfo\uuu
下的实体显示Blob<代码>\uuuu BlobInfo\uuuu实体包含的属性也比Blob查看器页面上显示的属性更多

所有属性如下所示:

  • 身份证/姓名
  • 内容类型
  • 创作
  • 创建新句柄
  • 文件名
  • md5_散列
  • 大小
  • 上传身份证

如果您碰巧查询了这些实体,您的应用程序也可以使用这些实体。

我理解这种行为是dev_appservers模拟blob/数据存储的方式。部署时不需要这样的实体,因为该实体现在存储在blobstore中。你没有遗漏任何东西。谢谢你详细而富有启发性的解释!;)