提前感谢您的帮助。
我有一个我在C#中以编程方式创建的字符串,我希望将其保存到Azure BLOB存储中。我在代码中构建字符串,然后尝试将其存储为最后一步(文本文件)。一切顺利,直到我的字符串变成一定的大小。该过程在某一点截断字符串。文件被创建,但溢出量被简单地删除。似乎我需要将操作分解成块,但我不太确定如何到达那里。我想我需要通读字符串,然后插入块。
我正在使用Azure管理库。这是我的代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(MyString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudContainer = blobClient.GetContainerReference(DestinationContainerName);
cloudContainer.CreateIfNotExists();
CloudBlockBlob blockBlob = cloudContainer.GetBlockBlobReference(DestinationFileName);
blockBlob.UploadText(sTheFile)
变量“sTheFile”是看起来太大的字符串。
我确实需要使用UploadText,因为文件是在代码中虚拟构建的。有谁知道如何解析我的字符串(stheFile)并以块的形式创建BLOB?
真诚的感谢...
答案 0 :(得分:2)
单个上传时阻止blob限制为64MB,存储客户端默认为32MB,通过设置SingleBlobUploadThresholdInBytes可以将其增加到64MB。
对于大小超过该大小的blob,您需要将字符串转换为MemoryStream并使用PutBlock以块的形式发送它。
此链接中的文章显示了如何执行此操作:
答案 1 :(得分:0)
谢谢大家,我觉得自己像个白痴。肇兴一声巨响。因为我使用的是以编程方式生成的字符串,所以我转换为MemoryStream而不是FileStream。
为将来可能需要它的人提供最终解决方案:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("MyConnectionString");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudContainer = blobClient.GetContainerReference(DestinationContainerName);
cloudContainer.CreateIfNotExists();
CloudBlockBlob blockBlob = cloudContainer.GetBlockBlobReference(DestinationFileName);
using (MemoryStream ms = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(sFile.ToString())))
{
blockBlob.UploadFromStream(ms);
}