Есть ли способ скопировать BLOB-объект из эмулятора локального хранилища в удаленное хранилище Azure? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь скопировать видеофайл из локального хранилища Azure в удаленное хранилище на C #, чтобы иметь возможность кодировать его с помощью служб мультимедиа Azure.

После получения больших двоичных объектов для копии с помощьюметод StartCopy, я получаю исключение 404. НЕ FOUNT.

destinationBlob.StartCopy(new Uri(sourceBlob.Uri.AbsoluteUri + signature));

Значение sourceBlob.Uri.AbsoluteUri является локальным Uri (http://127.0.0.1/ params)

Я ожидаюкопия должна быть выполнена, но вместо этого я получаю сообщение об ошибке 404.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
  • Вам необходимо два подключения к хранилищу Azure.
  • Вам необходимо подключиться к локальному видеофайлу в эмуляторе и рассматривать его как поток (назовите его localStream).
  • Затем необходимо открыть конечную точку назначения (удаленную) в хранилище Azure и открыть ее для записи в виде потока (назовите ее remoteStream)
  • Затем можно выполнить localStream.CopyTo (remoteStream).;

Этот пример позволяет передать задачу в эту функцию, которая принимает поток как объект для работы.Вам нужно настроить utils.GetBlockBlobReference , чтобы он указывал на фактическую ссылку на BLOB-объект.Этот метод открывает поток для Wtire, вам также может понадобиться тот, который открывает поток для чтения.У меня разные провайдеры для чтения / записи в хранилище.

    public async Task Use(string pointer, Func<System.IO.Stream, Task> useAction)
    {
        if (useAction == null)
        {
            throw new ArgumentNullException(nameof(useAction));
        }

        var blobRef = await utils.GetBlockBlobReference(storageFactory, pointer);
        using (var cloudStream = await blobRef.OpenWriteAsync())
        {
            await useAction(cloudStream);
        }
    }
0 голосов
/ 19 февраля 2019

К сожалению, вы не сможете сделать это, используя функциональность Copy Blob.Причина в том, что операция Copy Blob является асинхронной операцией на стороне сервера и требует, чтобы служба хранилища достигла источника копирования.

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

Сначала вам нужно будет сделать этоЗагрузите BLOB-объект из эмулятора на локальный компьютер, а затем загрузите BLOB-объект в облако.

...