将文本写入Azure存储中的文件

时间:2013-06-12 05:37:17

标签: azure azure-storage azure-storage-blobs

我在Azure存储帐户中上传了一个文本文件。现在,在我的工作者角色中,我需要做的是每次运行时,它从数据库中获取一些内容,并且该内容必须写在Uploaded中文本文件,具体来说,每次都应该用一些新内容覆盖文本文件的内容。

Here,他们提供了一种将文本文件上传到存储空间并删除文件的方法。但是我不想这样做,只需要每次修改已经存在的文本文件。

1 个答案:

答案 0 :(得分:6)

我假设您指的是在Windows Azure blob中存储文件。如果是这种情况:blob不是文件系统;它只是一个存储数据的地方(文件的概念有点人为 - 它只是......存储在一堆块中的blob)。

要修改文件,您需要将其下载并保存到本地磁盘,修改它(再次,在本地磁盘上),然后进行上传。关于这一点的一些想法:

  • 为此,您应在工作者角色的配置中分配本地磁盘。此磁盘将是一个逻辑磁盘,在您运行虚拟机的计算机内的本地物理磁盘上创建。换句话说,它将附加存储并且非常适合这种类型的使用。
  • vm实例与存储之间的带宽每个核心100Mbps。因此,在Small实例上获取10MB文件可能需要一秒钟。在XL上,可能大约十分之一秒。非常快,并且因VM系列(A,D,G)和尺寸而异。
  • 由于您的文件位于blob存储中,如果您愿意这样做(或者需要这样做),您可以在上传更新版本之前拍摄快照。快照就像存储数据块的链接列表。在有一天,您对现有数据进行更改(现在您将拥有代表旧数据和新数据的块)之前,快照无需任何成本。在blob-by-blob的基础上保留blob版本的绝佳方法(删除快照很简单)。

只是为了确保这个下载/修改/上传模式是清楚的,这是一个非常简单的例子(我只是在Visual Studio中快速输入它但没有测试它。只是试图说明这一点):

        // initial setup
        var acct = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        var client = acct.CreateCloudBlobClient();

        // what you'd call each time you need to update a file stored in a blob
        var blob = client.GetContainerReference("mycontainer").GetBlockBlobReference("myfile.txt");
        using (var fileStream = System.IO.File.OpenWrite(@"path\myfile.txt"))
        {
            blob.DownloadToStream(fileStream);
        }

        // ... modify file...

        // upload modified file
        using (var fileStream = System.IO.File.OpenWrite(@"path\myfile.txt"))
        {
            blob.UploadFromStream(fileStream);
        }