在 .NET Core 3.1 中附加到 Azure blob 文件的末尾而不下载整个文件
Append to the end of Azure blob file in .NET Core 3.1 without downloading the entire file
我需要追加到 Azure blob 文件的末尾,我想知道是否有一种无需下载整个 blob 文件即可执行此操作的方法。我四处搜索,但似乎大多数答案都使用现在已弃用的程序集。我想出如何在 .NET Core 3.1 中做到这一点的唯一方法是使用下面的代码。有没有更有效的方法来做到这一点?我知道根据我的要求,这个文件最终会变得非常大,下载整个文件只是为了在它的末尾附加一个快速行可能会变得效率低下。
我正在使用程序集Azure.Storage.Blobs
public static void BlobAppender()
{
BlobClient bc = new BlobClient("my azure connection string", "mycontainer", "myblobfile");
var testStream = bc.OpenRead();
StringBuilder SB = new StringBuilder();
using (StreamReader sm = new StreamReader(testStream))
{
string temp;
while ((temp = sm.ReadLine()) != null)
{
SB.AppendLine(temp);
}
}
//I append the line here, then reupload.
SB.AppendLine("My new line");
byte[] byteArray = Encoding.UTF8.GetBytes(SB.ToString());
MemoryStream stream = new MemoryStream(byteArray);
bc.Upload(stream, overwrite: true);
}
您可以使用 Append Blobs
,因为它们仅用于此目的。下面是使用 Azure.Storage.Blobs
SDK 的 12.8.0
版本的示例代码。
static async Task AppendBlobExample()
{
string connectionString = "connection-string";
string containerName = "container-name";
string blobName = "blob-name";
string content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pulvinar auctor vehicula. Proin vitae ante risus. Quisque fringilla orci eros, nec fermentum ipsum blandit et. Curabitur imperdiet tristique magna non vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed efficitur magna nisl, vitae venenatis leo semper nec. Nulla consequat lorem sapien, sed aliquam lectus dictum non. Morbi ac pulvinar justo, sit amet cursus turpis. In dictum odio non tellus aliquam viverra. Nunc vel vestibulum nulla. Ut mollis ultrices dignissim. Donec tellus nibh, bibendum suscipit felis sed, elementum auctor est. Donec ex nibh, pellentesque vitae odio ut, ornare pulvinar odio.";
var appendBlobClient = new AppendBlobClient(connectionString, containerName, blobName);
if (!await appendBlobClient.ExistsAsync())
{
await appendBlobClient.CreateAsync();
}
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
{
await appendBlobClient.AppendBlockAsync(ms);
}
}
我需要追加到 Azure blob 文件的末尾,我想知道是否有一种无需下载整个 blob 文件即可执行此操作的方法。我四处搜索,但似乎大多数答案都使用现在已弃用的程序集。我想出如何在 .NET Core 3.1 中做到这一点的唯一方法是使用下面的代码。有没有更有效的方法来做到这一点?我知道根据我的要求,这个文件最终会变得非常大,下载整个文件只是为了在它的末尾附加一个快速行可能会变得效率低下。
我正在使用程序集Azure.Storage.Blobs
public static void BlobAppender()
{
BlobClient bc = new BlobClient("my azure connection string", "mycontainer", "myblobfile");
var testStream = bc.OpenRead();
StringBuilder SB = new StringBuilder();
using (StreamReader sm = new StreamReader(testStream))
{
string temp;
while ((temp = sm.ReadLine()) != null)
{
SB.AppendLine(temp);
}
}
//I append the line here, then reupload.
SB.AppendLine("My new line");
byte[] byteArray = Encoding.UTF8.GetBytes(SB.ToString());
MemoryStream stream = new MemoryStream(byteArray);
bc.Upload(stream, overwrite: true);
}
您可以使用 Append Blobs
,因为它们仅用于此目的。下面是使用 Azure.Storage.Blobs
SDK 的 12.8.0
版本的示例代码。
static async Task AppendBlobExample()
{
string connectionString = "connection-string";
string containerName = "container-name";
string blobName = "blob-name";
string content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pulvinar auctor vehicula. Proin vitae ante risus. Quisque fringilla orci eros, nec fermentum ipsum blandit et. Curabitur imperdiet tristique magna non vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed efficitur magna nisl, vitae venenatis leo semper nec. Nulla consequat lorem sapien, sed aliquam lectus dictum non. Morbi ac pulvinar justo, sit amet cursus turpis. In dictum odio non tellus aliquam viverra. Nunc vel vestibulum nulla. Ut mollis ultrices dignissim. Donec tellus nibh, bibendum suscipit felis sed, elementum auctor est. Donec ex nibh, pellentesque vitae odio ut, ornare pulvinar odio.";
var appendBlobClient = new AppendBlobClient(connectionString, containerName, blobName);
if (!await appendBlobClient.ExistsAsync())
{
await appendBlobClient.CreateAsync();
}
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))
{
await appendBlobClient.AppendBlockAsync(ms);
}
}