用于块上传的Azure PutBlockAsync和PutBlockListAsync

问题描述 投票:0回答:1

我正在开发一个文件上传器,它使用Kendo UI按块上传文件块。我的网站的后端是ASP.NET核心MVC,Microsoft Azure用于存储上传的文件。 Kendo UI块上传器将块发送到后端,然后使用PutBlockAsync方法将这些块写入Azure blob。收到所有块后,我调用PutBlockListAsync将收到的块提交到azure,以便它应该在Azure blob中创建上传的文件。调用这两种方法时,调试器不显示任何错误,但在Azure blob中,上载的文件未创建。

以下是我写的两种方法调用的方法,

public async Task UploadInBlocksToAzure(string id, Stream stream)
    {
        try
        {
            var storageAccount = CloudStorageAccount.Parse(_connectionString);
            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();

            var container = cloudBlobClient.GetContainerReference("test-video-in");
            var blob = container.GetBlockBlobReference("a.mp4");
            await blob.PutBlockAsync(id, stream, null);
        }
        catch (Exception e)
        {
            throw;
        }
    }

这个方法是提交文件

public async Task CommitBlocksToAzure(IEnumerable<string> ids)
    {
        try
        {
            var storageAccount = CloudStorageAccount.Parse(_connectionString);
            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();

            var container = cloudBlobClient.GetContainerReference("test-video-in");
            var blob = container.GetBlockBlobReference("a.mp4");
            await blob.PutBlockListAsync(ids);
        }
        catch (Exception)
        {

            throw;
        }
    }

UploadInBlocksToAzure(string id, Stream stream)方法中的id参数提供标识块的Base64编码字符串。所以在我的应用程序中,假设我上传5.5MB文件,块大小为1MB,那么每个块的5个块和id012345。当我使用Convert.ToBase64String(BitConverter.GetBytes(chunkIndex))将这些数字转换为Base64字符串时,我得到chunk id,如AAAAAA==AQAAAA==AgAAAA==AwAAAA==BAAAAA==BQAAAA==

我正在遵循的方法有什么问题吗?

更新:当我更改逻辑以为块ID创建Base64编码的字符串时,文件已成功提交到azure blob但文件已损坏。

var id = Convert.ToBase64String(BitConverter.GetBytes(chunkData.ChunkIndex));

var id = Convert.ToBase64String(Encoding.UTF8.GetBytes(chunkData.ChunkIndex.ToString("d6")));
.net asp.net-mvc azure kendo-ui azure-storage
1个回答
0
投票

我执行此任务的方式没有任何问题,但我已经通过下载并在Windows媒体播放器中播放来验证上传的视频。 WMP显示错误,指出文件可能已损坏(原始文件正在WMP中播放)。

但是当我从Azure复制上传文件的blob URL并在Web浏览器中浏览时,视频播放没有任何问题。

代码中唯一的问题是我创建块ID的方式。以下方法对我有用,

var id = Convert.ToBase64String(Encoding.UTF8.GetBytes(chunkData.ChunkIndex.ToString("d6")));
© www.soinside.com 2019 - 2024. All rights reserved.