1

我已经实现了以下异步 blob 上传方法来上传多个块。

        var container = GetContainer(containerName);

        var blob = container.GetBlockBlobReference(blobName);

        String[] base64EncodedBlockIds = new String[10];// 10- number of Blocks

        //To upload the blocks in parallel - 10 parallel blocks
        ParallelLoopResult parallelLoopResult = Parallel.For(0,10, i =>
            {
                String base64EncodedBlockId = Convert.ToBase64String(System.BitConverter.GetBytes(i));                                 
                byte[] bytesMemoryStream = GetBytesFromStream(stream);
                using (MemoryStream memoryStream = new MemoryStream(bytesMemoryStream))
                {
                    blob.PutBlock(base64EncodedBlockId, memoryStream, null);// throws an exception "The value for one of the HTTP headers is not in the correct format"

                }
                base64EncodedBlockIds[i] = base64EncodedBlockId;
            });
        blob.PutBlockList(base64EncodedBlockIds); 

它会引发异常“其中一个 HTTP 标头的值格式不正确”。

需要您的投入

问候, 维维克

4

2 回答 2

2

blob 中的 BlockID 必须具有相同的长度(字符数)。BlockID“10”比其他的长,这可能是你问题的根源。

一种解决方案是将 BlockID 零填充到相同的长度。

于 2012-09-24T22:33:32.347 回答
1

在我的情况下,出现“HTTP 标头之一的值格式不正确”错误是因为我试图写一个空块(memoryStream有 0 个字节)。PutBlock 失败,因为标头中的内容长度为 0。

于 2013-11-20T12:05:10.043 回答