azure - 追加到 CloudBlockBlob 流

标签 azure azure-storage azure-blob-storage

我们有一个文件系统抽象,使我们能够轻松地在本地和云(Azure)存储之间切换。

对于读取和写入文件,我们有以下成员:

Stream OpenRead();
Stream OpenWrite();

我们的应用程序的一部分将文档“捆绑”到一个文件中。对于我们的本地存储提供程序,OpenWrite 返回一个可追加流:

public Stream OpenWrite()
{
    return new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, BufferSize, useAsync: true);
}

对于 Azure Blob 存储,我们执行以下操作:

public Stream OpenWrite()
{               
    return blob.OpenWrite();
}

不幸的是,这每次都会覆盖 blob 内容。是否可以返回一个可追加的可写流?

最佳答案

基于此处的 OpenWrite 文档 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.openwrite.aspx , OpenWrite 方法将覆盖现有的 blob,除非使用 accessCondition 参数明确阻止。

您可以做的一件事是读取流中的 blob 数据并将该流返回到调用应用程序,并让该应用程序将数据附加到该流。例如,请参阅下面的代码:

    static void BlobStreamTest()
    {
        storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
        CloudBlobContainer container = storageAccount.CreateCloudBlobClient().GetContainerReference("temp");
        container.CreateIfNotExists();
        CloudBlockBlob blob = container.GetBlockBlobReference("test.txt");
        blob.UploadFromStream(new MemoryStream());//Let's just create an empty blob for the sake of demonstration.
        for (int i = 0; i < 10; i++)
        {
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    blob.DownloadToStream(ms);//Read blob data in a stream.
                    byte[] dataToWrite = Encoding.UTF8.GetBytes("This is line # " + (i + 1) + "\r\n");
                    ms.Write(dataToWrite, 0, dataToWrite.Length);
                    ms.Position = 0;
                    blob.UploadFromStream(ms);
                }
            }
            catch (StorageException excep)
            {
                if (excep.RequestInformation.HttpStatusCode != 404)
                {
                    throw;
                }
            }
        }
    }

关于azure - 追加到 CloudBlockBlob 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161869/

相关文章:

azure - 如何在 terraform azure for redis 中使用私有(private)端点实现?

azure - 自动化 Azure Cloud Shell 预配取消预配存储帐户

c# - 上传到天蓝色存储返回空文件

asp.net - Azure 网站和自定义字体

c# - 此请求的授权已被拒绝 - 桌面到 ASP.NET Web API

c# - CloudTableClient客户端超时

c# - 通过 Web api 将大文件(> 1 GB)上传到 Azure Blob 存储

azure - Azure Blob 存储中是否有传输加速之类的功能?

python - 使用 microsoft azure 机器学习运行 python 脚本

python - 如何使用 Python 连接到 Azure 文件共享并读取 csv 文件