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ヘッダーの1つの値が正しい形式ではありません」という例外がスローされます。

入力が必要

よろしく、Vivek

4

2 に答える 2

2

BLOB 内の BlockID はすべて同じ長さ (文字数) である必要があります。BlockID "10" は他のものよりも長く、おそらく問題の原因です。

解決策の 1 つは、BlockID をゼロで埋めて同じ長さにすることです。

于 2012-09-24T22:33:32.347 に答える
1

memoryStream私の場合、空のブロック ( 0 バイト)を書き込もうとしたため、「HTTP ヘッダーの 1 つの値が正しい形式ではありません」というエラーが発生しました。ヘッダーのコンテンツの長さが 0 だったため、PutBlock が失敗しました。

于 2013-11-20T12:05:10.043 に答える