我在我的Azure存储帐户中上传了一个文本文件。现在,在我的辅助角色中,我需要做的是每次运行它时,它都会从数据库中获取一些内容,并且该内容必须写入上传的内容中文本文件,具体来说,每次文本文件的内容都应该被一些新内容覆盖。
Here ,他们提供了一种将文本文件上传到您的存储并删除文件的方法。但我不想这样做,每次只需要修改已经存在的文本文件。
最佳答案
我假设您指的是在 Windows Azure blob 中存储文件。如果是这种情况:blob 不是文件系统;而是文件系统。它只是一个存储数据的地方(文件的概念有点人为 - 它只是......存储在一堆 block 中的 blob)。
要修改文件,您需要下载它并将其保存到本地磁盘,修改它(再次在本地磁盘上),然后上传。对此的一些想法:
- 为此,您应该在辅助角色的配置中分配本地磁盘。该磁盘将是一个逻辑磁盘,在运行虚拟机的计算机内的本地物理磁盘上创建。换句话说,它将附加存储空间,非常适合这种类型的使用。
- 虚拟机实例和存储之间的带宽为
每个核心 100Mbps。因此,在小型实例上获取 10MB 的文件可能需要一秒钟的时间。在 XL 上,可能大约十分之一秒。非常快,并且随 VM 系列(A、D、G)和尺寸而变化。 - 由于您的文件位于 Blob 存储中,因此如果您愿意(或有必要)这样做,您可以在上传更新版本之前拍摄快照。快照就像存储数据 block 的链接列表。而且快照是免费的,直到有一天您对现有数据进行更改(现在您将拥有代表旧数据和新数据的 block )。这是逐个 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);
}
关于azure - 将文本写入 Azure 存储中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058324/