可以使用PutBlock附加到Azure中的现有BlockBlob

时间:2017-09-22 16:08:57

标签: c# azure azure-storage-blobs

根据标题,我有一个程序,我试图使用PutBlock方法添加到现有的BlobkBlob:

    private static void UploadNewText(string text)
    {
        string fileName = "test4.txt";
        string containerString = "mycontainer";

        CloudStorageAccount storage = CloudStorageAccount.Parse(connection);
        CloudBlobClient client = storage.CreateCloudBlobClient();
        CloudBlobContainer container = client.GetContainerReference(containerString);
        CloudBlockBlob blob = container.GetBlockBlobReference(fileName);

        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter sw = new StreamWriter(stream))
        {
            sw.Write(text);
            sw.Flush();
            stream.Position = 0;

            string blockId = Convert.ToBase64String(
                ASCIIEncoding.ASCII.GetBytes("0000005"));

            Console.WriteLine(blockId);

            blob.PutBlock(blockId, stream, null);
            blob.PutBlockList(new string[] { blockId });
        }
    }

据我了解,提供BlockId增加(或至少不同),并且是一致的大小,这应该工作;但是,当我第二次为同一个文件运行它时(无论我是否增加了Block ID),它只是用新文本覆盖现有文件。

我意识到还有其他选项可以附加到blob(例如AppendBlob),但我很好奇PutBlock,特别是可以做到这一点。我想做的是什么,如果是的话,我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

可以使用PutBlock附加到Azure中的现有BlockBlob

是的,它可以。但是,为了做到这一点,你需要以一种不同的方式工作。

您需要做的是:

  1. 首先获取先前提交的阻止列表。您要使用的方法是DownloadBlockList
  2. 上传新版块。记下它的块ID。
  3. 将此块ID附加到您在步骤#1中下载的块ID列表。
  4. 使用此新列表调用阻止列表。