我有一个大约有100万个数据对象的大型阵列。我发现了许多将文件上传到Azure Blob存储的示例。我想您可以使用内存流来做到这一点,但是我还没有找到从对象中做到这一点的样本。我不确定数据的大小是否应该逐行写我所拥有的选项。欢迎所有输入,如果有一些样本将是完美的。目标是将数据对象写入Azure Blob存储中的csv文件。
答案 0 :(得分:2)
我假定您正在使用最新版本的.NET(9.3.3)的C#编写代码。
这是我的代码,用于实现您将大量数据对象直接写入Azure Blob存储的需求。
using System;
using System.Collections;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
namespace WriteCSVDataToBlob
{
class Record
{
string[] cols;
public Record(string[] cols)
{
this.cols= cols;
}
override public string ToString()
{
return String.Join(',', cols);
}
}
class Program
{
static void Main(string[] args)
{
var arr = new ArrayList();
arr.Add(new Record(new string[]{ "A", "B","one" }));
arr.Add(new Record(new string[] { "C", "D","two"}));
string storageConnectionString = "<your storage connection string>";
var storageAccount = CloudStorageAccount.Parse(storageConnectionString);
var client = storageAccount.CreateCloudBlobClient();
var container = client.GetContainerReference("test");
var blob = container.GetBlockBlobReference("data.txt");
using (CloudBlobStream x = blob.OpenWriteAsync().Result)
{
foreach(var rec in arr)
{
x.Write(System.Text.Encoding.Default.GetBytes(rec.ToString()+"\n"));
}
x.Flush();
x.Close();
}
}
}
}
答案 1 :(得分:0)
@Peter Pan的解决方案适用于Microsoft.Azure.Storage.Blob v11.1.0。 在较新版本的azure blob存储中,您可以使用以下命令:
using (var writer = new StreamWriter(new MemoryStream()))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Configuration.Delimiter = userInputModel.Separator;
csv.WriteRecords(arr);
writer.Flush();
writer.BaseStream.Seek(0, SeekOrigin.Begin);
client.AppendBlock(writer.BaseStream);
}