我有一个对象,我将其转换为平面CSV,然后压缩并上传到文件存储中。
我可以按照以下步骤轻松地做到这一点。
我不希望因接触物理存储而遭受损失,因此希望在内存中完成所有这些操作。
我实际上正在做的是压缩字节数组并上传。这显然是错误的。 (因为压缩的Gzip文件未压缩时,它包含csv的字节数组,而不是实际的csv本身。)
是否可以在内存中创建“ file.csv”之类的文件,然后在内存中进行压缩,而不是压缩字节数组?
我遇到的问题是,当保存到物理位置时,似乎只能命名文件并指定其扩展名。
public byte[] Example(IEnumerable<object> data)
{
// Convert Object to CSV and write to byte array.
byte[] bytes = null;
using (var ms = new MemoryStream())
{
TextWriter writer = new StreamWriter(ms);
var csv = new CsvWriter(writer);
csv.WriteRecords(data);
writer.Flush();
ms.Position = 0;
bytes = ms.ToArray();
}
//Compress byte array
using (var compressedStream = new MemoryStream(bytes))
using (var resultStream = new MemoryStream())
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
zipStream.CopyTo(resultStream);
zipStream.Close();
var gzipByteArray = resultStream.ToArray();
//Upload to AzureStorage
new AzureHelper().UploadFromByteArray(gzipByteArray, 0, gzipByteArray.Length);
}
}