繁体   English   中英

有没有办法将Blob从本地存储模拟器复制到远程Azure存储?

[英]Is there a way to copy a blob from the local storage emulator to a remote azure storage?

我正在尝试将视频文件从本地Azure存储复制到C#中的远程存储,以便能够使用Azure Media Services对其进行编码。

使用StartCopy方法检索副本的Blob之后,我返回了404 NOT FOUNT异常。

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

sourceBlob.Uri.AbsoluteUri的值是本地Uri( http://127.0.0.1/ params)

我希望执行副本,但是却收到404错误。

不幸的是,您将无法使用“ Copy Blob功能来完成此操作。 原因是“ Copy Blob操作是服务器端的异步操作,需要Storage Service才能到达复制源。

由于复制源是本地仿真器中的Blob,因此Storage Service无法达到该目标,因此会出现404错误。

您需要做的是首先从本地计算机上的仿真器下载Blob,然后将Blob上传到云中。

  • 您需要两个连接到Azure存储。
  • 您需要在模拟器中连接到本地视频文件,并将其视为流(称为localStream)。
  • 然后,您需要在Azure存储中打开目标(远程)终结点,并以流形式将其打开以进行写入(将其称为remoteStream)
  • 然后,您可以执行localStream.CopyTo(remoteStream);。

本示例使您可以将Task传递给此函数,该函数接受Stream作为要处理的对象。 您将需要调整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);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM