首页 > 解决方案 > Azure 存储资源管理器未列出所有 Blob

问题描述

当我在 Azure 存储资源管理器中打开 Blob 容器时,有时它仅列出容器包含的 Blob 的子集。如何让它列出所有这些?我尝试刷新,搜索 blob name prefix,没有任何帮助。遗憾的是,源代码目前不可用,除了它是一个 Electron 应用程序之外,我没有找到任何关于其内部工作的信息,因此很难从这个方向深入研究问题。

我无法重现该问题,它只是不时弹出。目前,我正在使用一个容器,其中存储资源管理器仅列出一个 169 KB 的文件,并在底部显示“显示 1 到 1 个缓存项目”,但是当我单击工具栏中的文件夹统计信息按钮时,活动窗口显示“ devstoreaccount1/palecblobcontainer 的统计信息:5 blob;588,270 字节(不包括快照) ”。

当我使用 REST API 列出 blob时,我得到了所有这些。即我http://127.0.0.1:10000/devstoreaccount1/palecblobcontainer?restype=container&comp=list在我的浏览器中查看,所有 5 个 blob 都列在生成的 XML 中。我通过单击存储资源管理器工具栏中的复制 URL、删除 blob 的路径并添加查询字符串来获取容器的 URL。

我不仅使用 Storage Emulator 观察到这一点,甚至使用实际的 Azure Storage 也观察到了这一点。每次我遇到这个问题时,即使在 Storage Explorer 重新启动和删除,%AppData%\StorageExplorer甚至在分离和重新附加 storage account之后,它仍然存在,所以似乎缓存不是问题。我在 GitHub 上发现了一个与分页相关的类似问题,但在我的情况下,观察到的计数是一致的并且非常低,因此所有 blob 都适合一页。

一旦停止显示一些 blob,如何使存储资源管理器再次工作?如果是错误,是否有解决方法?有没有一种合理的方法可以让我更深入地研究这个问题?我在 Windows 10 上使用存储资源管理器 1.8.1。

标签: azure-storageazure-blob-storage

解决方案


Storage Explorer 在后台使用 REST API。打开或刷新 Blob 容器时,请求路径为/devstoreaccount1/palecblobcontainer?restype=container&comp=list&maxresults=1000&delimiter=%2F.

就我而言,问题在于URL 编码的斜杠delimiter=%2F在哪里。%2F如果没有该参数,API 响应将包含所有 blob,但如果包含该参数,则仅返回存储资源管理器中列出的 blob。

当我在容器的根目录中上传另一个文件(任意 desktop.ini)时,它看起来像这样:

当我删除 .safe blob 时,会列出 404 blob(并且 desktop.ini 仍会列出)。当我删除 404 时,会列出 404.safe。当我重命名404.safe为 时404.safe_,列出了 chci-vuz-skoda。

列出包含具有空名称的子文件夹的文件夹时,API 不会列出空名称文件夹,而是显示其第一个 blob。这可能是 REST API(或下面的一些代码)的错误。我不确定这是否是列表的错误,或者空段是否会导致此类 blob 的上传失败。我没有设法使用存储资源管理器创建这样的 blob,并且blob 名称限制的文档没有谈到这些限制。

要使用存储资源管理器处理空名称文件夹中的 blob,请来回重命名它们。这会将它们从空名称文件夹移动到其父文件夹(即压缩 blob 名称中的斜杠序列)。但是,这会更改 blob 名称,因此必须更新存储的 blob 名称副本和依赖于 blob 名称的任何代码。

我使用Fiddler观察了请求和响应。存储资源管理器 > 编辑 > 配置代理 > 使用自定义代理设置(URL:http: //127.0.0.1,端口:8888)并运行 Fiddler。还有 Storage Explorer > Help > Toggle Developer Tools (F12),它显示了应用程序的 Chrome 开发者工具,但是 Network 选项卡没有显示请求,我不想深入挖掘。


推荐阅读