Мы моделируем структуру каталогов в хранилище BLOB-объектов Azure. Я хотел бы иметь возможность копировать все файлы из папки в локальный каталог. Есть ли способ скопировать сразу несколько файлов из хранилища BLOB-объектов, соответствующих шаблону, или мне нужно получать эти файлы по отдельности?
Копирование нескольких файлов из хранилища BLOB-объектов Azure
Ответы (2)
Как вы, возможно, уже знаете, хранилище больших двоичных объектов поддерживает только одноуровневую иерархию: у вас есть контейнеры больших двоичных объектов (папка), и каждый контейнер содержит большие двоичные объекты (файлы). Там нет понятия иерархии папок. Вы создаете иллюзию иерархии папок с помощью того, что называется blob prefix
. Например, посмотрите на снимок экрана ниже:
На картинке выше вы видите две папки в images
контейнере больших двоичных объектов: 16x16
и 24x24
. В облаке имена больших двоичных объектов включают эти имена папок. Таким образом, имя файла AddCertificate.png
в папке 24x24 в хранилище BLOB-объектов - 24x24/AddCertificate.png
.
Теперь, переходя к вашему вопросу, вам все равно нужно будет загружать отдельные файлы, но клиентская библиотека хранилища позволяет вам получить список больших двоичных объектов по префиксу больших двоичных объектов. Поэтому, если вы хотите загрузить все файлы в папке 24x24
(или, другими словами, вы хотите загрузить все большие двоичные объекты с префиксом 24x24
), вы должны сначала перечислить эти большие двоичные объекты с префиксом 24x24
, а затем загрузить каждый большой двоичный объект по отдельности. На локальном компьютере вы можете создать папку по имени префикса.
Вы можете ссылаться на приведенный ниже код как на образец справочника ((он написан на 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
Вторая ссылка объясняет, как анализировать префиксы больших двоичных объектов и извлекать из них иерархию папок. Он также показывает, как загрузить большой двоичный объект с помощью нескольких потоков и обеспечить целостность большого двоичного объекта с помощью MD5.
Просто включите высокоуровневый код, обрабатывающий путь больших двоичных объектов, содержащий префиксы. Пожалуйста, обратитесь к ссылке выше для полной реализации, я не могу скопировать и вставить здесь всю реализацию.
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
}