gpt4 book ai didi

azure - 追加到 CloudBlockBlob 流

转载 作者:行者123 更新时间:2023-12-04 12:09:00 24 4
gpt4 key购买 nike

我们有一个文件系统抽象,使我们能够轻松地在本地和云(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com