Как переместить большой двоичный объект в подкаталог в Azure с помощью node.js

У меня есть служба node.js, которая должна загрузить файл из Azure, обработать его и, когда он будет готов, переместить его в подпапку «done» в том же контейнере.

Я копался в документации более часа и не смог найти никакого метода, чтобы скопировать blob или переименовать его, потому что, если я создам его с самого начала как done / blob-name, он визуально представит его внутри подпапки, поэтому переименование может также помочь (я знаю, как это работает, и меня это устраивает, я фильтрую капли, игнорируя всех, кто содержит done / в их имени).

Единственное, что достаточно близко, - это startCopyFromURL, который является членом класса blob, но я не могу понять, как его использовать, потому что я предоставляю только источник, но не адресата ... все, что я прошу, это простая функция copyBlob (sourceBlobURL, dstBlobUrl) -.-

как ни странно портал Azure не предоставляет никаких опций копирования / переименования, но есть нечто, называемое «обозреватель хранилища» (доступный через портал Azure), и, насколько я понял, это графический интерфейс, позволяющий расширенные операции с большими двоичными объектами, включая копирование операции и управление подпапками. Так что, если для этого есть графический интерфейс, должен быть программный способ ...

Я использую (вроде) новый sdk v10 (здесь), требуя только Часть @ azure / storage-blob в моем скрипте.

Большое спасибо за вашу помощь!

ОБНОВЛЕНИЕ: я нашел ссылки на метод под названием "startCopyAsync", но все примеры, которые я смог найти в Интернете, относятся к SDK на разные языки (например, C #) и им 1-2 года, в то время как новый JS sdk официально является основным SDK для js только несколько недель назад (июль 19-го). Не удалось найти упоминания об этой функции в новом SDK JS.


person Gibor    schedule 24.07.2019    source источник


Ответы (2)


Вы можете использовать startCopyFromURL. , как вы сами предполагали. Источник - это первый аргумент, а цель - это объект Blob, который вы используете для вызова этого метода. Итак, поток выглядит примерно так:

  1. Создайте целевой объект Blob (пустой, включая все необходимые подпапки, например done)
  2. Вызовите startCopyFromURL, указав URL-адрес источника
  3. Дождитесь разрешения обещания.

Пример без JavaScript можно найти здесь.

person Yury Fedorov    schedule 24.07.2019
comment
С этой неприятной документацией Microsoft потребовалось некоторое время, но я, наконец, понял. Спасибо за разъяснения! - person Gibor; 24.07.2019

Вы не можете переименовать blob-объект; вы можете только скопировать большой двоичный объект в новый (или загрузить новый большой двоичный объект).

По поводу подкаталогов: такого нет. Иерархия такова:

account / container / blob

То, что выглядит как подкаталог в имени большого двоичного объекта, - это просто символы пути. Например:

https://myblobs.blob.core.windows.net/mycontainer/images/image1.jpg

Это действительно капля с именем "images/image1.jpg"

Различные вызовы списков больших двоичных объектов позволяют фильтровать с помощью символа-разделителя, создавая иллюзию подкаталогов.

Итак, в вашем случае вам нужно будет загрузить свой «обработанный» большой двоичный объект в новый большой двоичный объект (будь то в том же контейнере или в новом контейнере). А если вы загружаете в тот же контейнер, вам нужно придумать новое имя. Если вы используете другой контейнер для обработанных больших двоичных объектов, вам не придется беспокоиться о том, чтобы придумать другое имя большого двоичного объекта.

person David Makogon    schedule 24.07.2019
comment
Из-за иллюзии подкаталогов, если я загружу его в тот же контейнер под именем / done / blobName, все должно быть в порядке, нет? - person Gibor; 24.07.2019
comment
@Gibor - правильно - если бы вы назвали свой новый image1.jpg чем-то вроде https://.../processed/image1.jpg, все будет в порядке - person David Makogon; 24.07.2019