从Azure Blob存储复制多个文件

时间:2014-03-31 06:16:44

标签: azure azure-storage-blobs

我们正在为Azure Blob存储中的目录结构建模。我希望能够将文件夹中的所有文件复制到本地目录。有没有办法一次性复制blob存储中与模式匹配的多个文件,还是我必须单独获取这些文件?

2 个答案:

答案 0 :(得分:2)

您可能已经知道,blob存储仅支持1级层次结构:您有blob容器(文件夹),每个容器包含blob(文件)。那里没有文件夹层次结构的概念。您创建文件夹层次结构幻觉的方式是通过名为blob prefix的方式。例如,请看下面的屏幕截图:

enter image description here

在上图中,您会在images blob容器下看到两个文件夹:16x1624x24。在云中,blob名称包含这些文件夹名称。因此blob存储中文件夹24x24中AddCertificate.png文件的名称为24x24/AddCertificate.png

现在回答你的问题,你仍然需要下载单个文件,但是存储客户端库允许你做的是通过blob前缀获取blob列表。因此,如果要下载文件夹24x24中的所有文件(或者换句话说,您要下载前缀为24x24的所有blob),则首先列出前缀为24x24的blob,然后单独下载每个blob。在本地计算机上,您可以使用前缀名称创建一个文件夹。

答案 1 :(得分:0)

您可以参考下面的代码作为示例参考((用javascript编写,但您可以轻松地将逻辑映射到任何语言)。此代码由Microsoft维护。

https://github.com/WindowsAzure/azure-sdk-tools-xplat/blob/master/lib/commands/storage.blob._js#L144 https://github.com/WindowsAzure/azure-sdk-tools-xplat/blob/master/lib/commands/storage.blob._js#L689

第二个链接解释了如何解析blob前缀并从中获取文件夹层次结构。 它还显示了如何使用多个线程下载blob并使用MD5确保blob的完整性。

只包含处理包含前缀的blob路径的高级代码。请参考以上链接进行全面实施,我无法在此复制粘贴整个实现。

if (!fileName) {
  var structure = StorageUtil.getStructureFromBlobName(specifiedBlobName);
  fileName = structure.fileName;
  fileName = utils.escapeFilePath(fileName);
  structure.dirName = StorageUtil.recursiveMkdir(dirName, structure.dirName);
  fileName = path.join(structure.dirName, fileName);
  dirName = '.'; //FileName already contain the dirname
}
相关问题