0

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

使用 StartCopy 方法检索副本的 blob 后,我得到一个 404 NOT FOUNT 异常返回。

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

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

我希望副本被执行,但我得到一个 404 错误。

4

2 回答 2

1

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

由于复制源是本地模拟器中的一个 blob,存储服务无法访问它,因此您会收到 404 错误。

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

于 2019-02-19T11:55:18.860 回答
1
  • 你需要两个到 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);
        }
    }
于 2019-02-19T11:55:22.163 回答