Как получить список папок из лазурного контейнера?

Я хотел бы получить все папки и файлы в лазурном контейнере в nodejs

Я использую библиотеку azure-storage для получения большого двоичного объекта, но не могу найти ни одного примера, чтобы перечислить все папки в контейнере. Я выгружаю (экспортирую) свои данные аналитики в контейнер для хранения в auzure. Теперь я попытался прочитать эти файлы

Моя структура хранения вроде

ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2016-09-29/18/270b58c-04d7-4e5d-a503-cdce24a3940c_20160929_184723.blob

Я хочу прочитать все папки, созданные для каждого дня, и файлы в этих папках

var containerName = "assist-ios-analytics-full";


blobService.listBlobsSegmented(containerName, null, {maxResults : 10}, function(err, result) {
    if (err) {
        console.log("Couldn't list blobs for container %s", containerName);
        console.error(err);
    } else {
        console.log('Successfully listed blobs for container %s', containerName);
        console.log(result.entries);
        console.log(result.continuationToken);
        res.json(result);
    }
});

последняя папка будет сегодняшней датой

ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2017-05-31/18/270b58c-04d7-4e5d-a503-cdce24a3940c_20160929_184723.blob

person Navneet Garg    schedule 31.05.2017    source источник
comment
Ни у одного поставщика облачного хранилища больших двоичных объектов нет папок. Определенно не Amazon, Azure, Rackspace, Openstack. ВСЕ из них предоставляют плоское хранилище с определенными символами, обычно / используемыми в качестве заполнителей для имитации папок. В зависимости от провайдера вы можете запросить все файлы, начинающиеся с определенного префикса, что эквивалентно запросу всех файлов в папке.   -  person Panagiotis Kanavos    schedule 31.05.2017
comment
Причина использования плоского хранилища в том, что папки требуют рекурсии и поэтому не могут масштабироваться до облачного хранилища.   -  person Panagiotis Kanavos    schedule 31.05.2017
comment
но Аузре сказал, что рядом с контейнером есть папки, и я также указал формат пути ios_06cd82e4db0845b9bef73c5b22bea2fa / Event / 2016-09-29 / 18 /   -  person Navneet Garg    schedule 31.05.2017
comment
Итак, если я правильно понимаю, вы хотите указать ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/{date e.g. 2016-09-29} и увидеть там список всех BLOB-объектов. Верный?   -  person Gaurav Mantri    schedule 31.05.2017
comment
да, аналитика сбрасывается в контейнер каждый день, и я хочу прочитать эти данные   -  person Navneet Garg    schedule 31.05.2017
comment
blobService.listBlobsSegmented работает для меня, но возвращает все. есть ли способ отфильтровать папку, скажем, получить только последнюю папку?   -  person Navneet Garg    schedule 31.05.2017
comment
Вы можете поделиться кодом? Также укажите latest folder.   -  person Gaurav Mantri    schedule 31.05.2017
comment
добавлен код, пожалуйста, проверьте   -  person Navneet Garg    schedule 31.05.2017


Ответы (1)


Вы хотели бы использовать функцию _ 1_.

Что вы там сделаете, так это укажите prefix как ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/{date e.g. 2017-05-31} и options.delimiter как "", что обеспечит возврат всех BLOB-объектов, имя которых начинается с префикса, указанного выше.

Итак, ваш код будет:

blobService.listBlobsSegmentedWithPrefix(containerName, 'ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2017-05-31', null, {delimiter: "", maxResults : 10}, function(err, result) {
    if (err) {
        console.log("Couldn't list blobs for container %s", containerName);
        console.error(err);
    } else {
        console.log('Successfully listed blobs for container %s', containerName);
        console.log(result.entries);
        console.log(result.continuationToken);
        res.json(result);
    }
});
person Gaurav Mantri    schedule 31.05.2017
comment
можем ли мы отфильтровать эти данные, скажем, нужна ли мне последняя папка (созданная последней)? Если я читаю данные до вчерашнего дня, я хочу прочитать данные после этого, что должно быть решением для этого? - person Navneet Garg; 01.06.2017
comment
Как отметил @Panagiotis Kanavos в комментариях к вашему вопросу, в хранилище BLOB-объектов Azure нет папок. Это просто префиксы blob. Что вам нужно сделать, так это отсортировать капли по дате. Опять же, сортировка на стороне сервера не разрешена, поэтому вам нужно будет получить список всех BLOB-объектов на стороне клиента и выполнить сортировку самостоятельно. HTH. - person Gaurav Mantri; 01.06.2017
comment
Хорошо, но у меня более 5000 записей, это будет очень медленно, если я получу все blob за один запрос. - person Navneet Garg; 01.06.2017
comment
Это правда! Есть ли приложение, через которое вы получаете эти журналы? - person Gaurav Mantri; 01.06.2017
comment
Что я знаю :). Вы можете начать с сегодняшней даты и получить все капли для этой даты. Затем, если вам нужно больше, вы можете начать сокращать дату на 1 день и повторить процесс. К сожалению, вы не можете указать службе хранилища Azure получить последние большие двоичные объекты. Это то, что вам нужно сделать. - person Gaurav Mantri; 01.06.2017
comment
Или я сохраняю ContinuationToken, а затем передаю этот токен в следующем запросе? - person Navneet Garg; 01.06.2017
comment
Это вам нужно будет сделать в любом случае, поскольку один запрос к хранилищу будет перечислять только 5000 больших двоичных объектов. Но не сохраняйте токен продолжения постоянно. - person Gaurav Mantri; 01.06.2017
comment
Почему ? токен меняется каждый раз? как я могу отследить, сколько BLOB-объектов импортировано и запросить после этого? - person Navneet Garg; 01.06.2017
comment
Маркер продолжения - это непрозрачное свойство, и с ним следует так обращаться. Вы можете использовать его за один запуск приложения, но не должны хранить его в базе данных и строить логику приложения вокруг его значения. - person Gaurav Mantri; 01.06.2017
comment
я столкнулся с очень странной проблемой. когда я запрашиваю 500 blob blobService.listBlobsSegmented (containerName, token, {maxResults: 1000}, function (err, result), моя сеть перестает работать. Когда я попробовал 100, она работает нормально. Вы можете мне объяснить причину этого? - person Navneet Garg; 06.06.2017
comment
Задайте новый вопрос по проблеме, с которой вы столкнулись. - person Gaurav Mantri; 06.06.2017