0

提前感谢您的帮助。

我有一个在 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?

真诚的感谢...

4

2 回答 2

2

单个上传的块 blob 限制为 64MB,存储客户端默认为 32MB,您可以通过设置 SingleBlobUploadThresholdInBytes 将其增加到 64MB。

对于大于该大小的 blob,您需要将字符串转换为 MemoryStream 并使用 PutBlock 以块的形式发送它。

此链接上的文章显示了如何做到这一点:

Windows Azure - BlockBlob PutBlock 方法

于 2015-06-24T23:12:19.913 回答
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);
        }
于 2015-06-25T02:09:18.540 回答