【问题标题】:Can i use putblock as append blob?我可以使用 putblock 作为附加 blob 吗?
【发布时间】:2020-12-20 12:19:32
【问题描述】:

所以我正在尝试逐块上传文件... Can PutBlock be used to append to an existing BlockBlob in Azure 从这个例子... 我正在上传一个 20mb 的文件,但最后,当我在容器上看到它时,它是 7mb,当我下载 blob 时它被破坏了......我做错了什么?

 public async Task AppendBlobOnAsset(Stream stream, MediaServiceRequest request)
        {
            var cloudBlobContainer = new CloudBlobContainer(request.InputAssetStorageUri);
            var blockBlob = cloudBlobContainer.GetBlockBlobReference(request.BlobName);

            var blockList = new List<ListBlockItem>();
            var blockListItems = new List<string>();
            if (true)
            {
                var blocks = await blockBlob.DownloadBlockListAsync();
                blockList = blocks.ToList();
                blockListItems = blockList.Select(x => x.Name).ToList();
            }
            //string blockId = Guid.NewGuid().ToString("m");
            string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("0000005"));
            blockBlob.PutBlock(blockId, stream, null);

            blockListItems.Add(blockId);
            blockBlob.PutBlockList(blockListItems);
        }


  using var file = File.OpenRead("C:\\Projects\\file.mp4");
            int bytesRead;
            var appendBlobMaxAppendBlockBytes = 4000000;
            var buffer = new byte[appendBlobMaxAppendBlockBytes];
            while ((bytesRead = await file.ReadAsync(buffer, 0, buffer.Length)) > 0)
            {
                var newArray = new Span<byte>(buffer, 0, bytesRead).ToArray();
                Stream stream = new MemoryStream(newArray);
                stream.Position = 0;
                await AppendBlobOnAsset(stream, request);
            }

【问题讨论】:

    标签: asp.net-core-webapi azure-blob-storage


    【解决方案1】:
     public async Task AppendBlobOnAssetAsync(int blockId, Stream stream, MediaServiceRequest request)
            {
                var cloudBlobContainer = new CloudBlobContainer(request.InputAssetStorageUri);
                var blockBlob = cloudBlobContainer.GetBlockBlobReference(request.BlobName);
    
                var blockItems = new List<ListBlockItem>();
                var blockItemIds = new List<string>();
    
                if (blockId > 0)
                {
                    var blocks = await blockBlob.DownloadBlockListAsync();
                    blockItems = blocks.ToList();
                    blockItemIds = blockItems.Select(x => x.Name).ToList();
                }
    
                var Id = Convert.ToBase64String(Encoding.UTF8.GetBytes(blockId.ToString(CultureInfo.InvariantCulture).PadLeft(30, '0')));
    
                blockBlob.PutBlock(Id, stream, null);
    
                blockItemIds.Add(Id);
                blockBlob.PutBlockList(blockItemIds);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2011-09-06
      • 2015-05-09
      • 2011-03-25
      相关资源
      最近更新 更多