Azure存储资源管理器未列出所有Blob

时间:2019-05-14 14:35:42

标签: azure-storage azure-storage-blobs azure-blob-storage

当我在Azure存储资源管理器中打开blob容器时,有时它会仅列出容器包含的blob的一部分。如何使它们全部列出?我尝试刷新,searching for the blob name prefix,没有任何帮助。遗憾的是,source code is not available到目前为止,除了它是一个Electron应用程序之外,我没有找到有关其内部工作的任何信息,因此很难从这个方向深入研究问题。

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

当我 list the blobs using the REST API时,我都知道了。即我在浏览器中查看http://127.0.0.1:10000/devstoreaccount1/palecblobcontainer?restype=container&comp=list,所有5个blob都列在生成的XML中。通过单击Storage Explorer工具栏中的“复制URL”,删除Blob的路径并添加查询字符串,可以得到容器的URL。

我不仅使用Storage Emulator进行了观察,甚至使用实际的Azure存储也进行了观察。每次遇到此问题时,即使重新启动并删除了%AppData%\StorageExplorer,甚至在Storage Explorer重新启动并删除后,甚至在分离并重新附加存储帐户后,它仍然会持续存在,因此似乎缓存不是问题。我发现有similar issue on GitHub与分页有关,但在我的情况下,观察到的计数是一致的并且非常低,因此所有斑点都可以放在一页上。

一旦停止显示一些Blob,如何使Storage Explorer再次工作?如果是错误,是否有解决方法?有什么合理的方法可以使我更深入地研究这个问题?我正在Windows 10上使用Storage Explorer 1.8.1。

1 个答案:

答案 0 :(得分:1)

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

就我而言,问题出在delimiter=%2F部分,其中%2F是URL编码的斜杠。如果没有该参数,API响应将包含所有blob,但是如果包含该参数,则仅返回Storage Explorer中列出的blob。

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

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

列出包含名称为空的子文件夹的文件夹时,API不会列出名称为空的文件夹,而是显示其第一个blob。这可能是REST API的错误(或某些错误)下面的代码)。我不确定这是否是列表中的错误,还是不确定空白段是否会导致此类Blob的上传失败。我没有使用Storage Explorer创建这样的Blob,documentation of blob names limitations也没有讨论这种限制。

要使用Storage Explorer使用空名称文件夹中的Blob,请对其进行前后重命名。将其从空名称文件夹移至其父文件夹(即,对斜杠进行压缩)在Blob名称中)。但是,这会更改Blob名称,因此必须更新Blob名称的存储副本以及任何依赖Blob名称的代码。

我使用Fiddler观察了请求和响应。 Storage Explorer>编辑>配置代理>使用自定义代理设置(URL:http://127.0.0.1,端口:8888)并运行Fiddler。还有Storage Storage>帮助> Toggle开发人员工具(F12),它显示该应用程序的Chrome开发人员工具,但“网络”选项卡不显示请求,我也不想深入。