【问题标题】:Can PutBlock be used to append to an existing BlockBlob in Azure可以使用 PutBlock 追加到 Azure 中的现有 BlockBlob
【发布时间】:2017-09-23 03:14:44
【问题描述】:

根据标题,我有一个程序,我正在尝试使用 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 增加(或至少不同)并且大小一致,这应该可以工作;但是,当我为同一个文件再次运行它时(无论我是否增加块 ID),它只会用新文本覆盖现有文件。

我意识到还有其他选项可以附加到 blob(例如 AppendBlob),但我很好奇 PutBlock 是否可以做到这一点。我正在尝试做的事情是否可行?如果可以,我做错了什么?

【问题讨论】:

    标签: c# azure azure-blob-storage


    【解决方案1】:

    PutBlock 能否用于附加到 Azure 中的现有 BlockBlob

    是的,可以。但是,为了做到这一点,您需要以稍微不同的方式进行工作。

    你需要做的是:

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

    【讨论】:

    • 对于(2),如果不使用 PutBlock,您将如何上传块?块可以独立上传到 blob 之外吗?
    • 对不起,我不清楚。在 #2 中,您将使用 PutBlock 上传块。
    • 但是你不需要知道block Id来使用PutBlock吗?
    • 对。但这也是您在上面的代码中所做的。你犯错误的地方是当你调用 PutBlockList 时,你只是传递了这个块 ID。您需要做的是获取现有的块 id 列表,将这个新的块 id 附加到该列表,然后使用这个新列表调用 PutBlockList。
    • 抱歉 - 我已经在脑海中转置了 PutBlock 和 PutBlockList - 现在效果很好 - 非常感谢!
    猜你喜欢
    • 2019-08-18
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多