Это, безусловно, выполнимо, однако это не будет одношаговый процесс.
Во-первых, у вас не может быть токена SAS для виртуальной папки. Вам потребуется получить токен SAS для контейнера больших двоичных объектов с разрешениями List
(для просмотра больших двоичных объектов) и Read
(для загрузки больших двоичных объектов).
Далее вы перечислите большие двоичные объекты в виртуальной папке внутри. контейнер BLOB-объектов. Для этого вам необходимо указать путь к виртуальной папке в качестве префикса. Это даст вам список BLOB-объектов внутри этой виртуальной папки. Убедитесь, что вы указали пустую строку в качестве разделителя, чтобы в ней содержались все большие двоичные объекты в этих виртуальных папках.
После того, как у вас есть список больших двоичных объектов, вам нужно будет прочитать (загрузить) большие двоичные объекты и где-то сохранить их содержимое. в браузере.
После того, как вы прочитали содержимое блоба, вы можете использовать zip-библиотеку на основе JS для динамического создания содержимого zip-файла, и как только все капли будут добавлены в zip-файл, вы можете принудительно загрузить из этого почтового файла. Быстрый поиск zip-библиотеки на основе JS привел меня сюда: https://stuk.github.io/jszip/. Когда я реализовал эту функциональность в продукте, который я создал, я использовал библиотеку Zip JS, но, к сожалению, я не могу найти ее в Интернете, хотя сейчас.
Биты и кусочки кода, которые я написал много лет назад go (это было частью гораздо большего приложения +, когда я написал его, JS Storage SDK не было, поэтому извиняюсь, если код не имеет большого смысла для вас. Пожалуйста, используйте его только для общего руководства).
zip.workerScriptsPath = '/Scripts/ZipJS/';
zipWriter = new zip.BlobWriter();
zip.createWriter(zipWriter, function (zipWriter) {
startZippingFiles(zipWriter);
}, function () {
}, true);
function startZippingFiles(writer) {
if (downloadedContent.length > 0) {//downloadedContent is an array containing downloaded blobs
var downloadedContentItem = downloadedContent.shift();//read first item
var cloudBlob = downloadedContentItem.Blob;//get the cloud blob object
var blobContents = downloadedContentItem.Content;//get the blob's content
var status = downloadedContentItem.Status;//status to track blob's download status
if (status === 'Completed') {
writer.add(cloudBlob.name,
new zip.BlobReader(new Blob([blobContents], { type: cloudBlob.properties.contentType })), function () {
console.log(cloudBlob.name + ' added to zip...')
downloadedBlobsCount += 1;
startZippingFiles(writer);
}, function (o) {
console.log('Adding ' + cloudBlob.name + ' to zip file. ' + parseFloat((o * 100) / cloudBlob.size).toFixed(2) + '% done...');
});
}
} else {
writer.close(function (blob) {//Finally save the zipped data as download.zip
saveAs(blob, "download.zip");
zipWriter = null;
});
console.log("Download successful!");
}
}