早上好,
我尝试使用提供的示例代码首次实施Azure博客存储。但是,在尝试UploadFromStream()时,我的应用程序遇到了非常广泛的400 Bad Request错误。
我在这个问题上做了很多搜索。我遇到的几乎所有内容都将容器或blob的命名约定视为问题。这不是我的问题,我使用全部小写等等。
我的代码与他们的示例代码没有区别:
连接字符串:
<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=xxxxxx;EndpointSuffix=core.windows.net" />
代码:
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
// Retrieve reference to a blob named "myblob"
CloudBlockBlob blob = container.GetBlockBlobReference("myblob");
// Create the container if it doesn't already exist
container.CreateIfNotExists();
// Create or overwrite the "myblob" blob with contents from a local file.
using (var fileStream = System.IO.File.OpenRead(@"D:\Files\logo.png"))
{
blob.UploadFromStream(fileStream);
}
这就是我必须继续下去的全部内容。我能想到的唯一另一件事就是我在我的开发环境中使用HTTP而不是HTTPS运行它。不确定这可能是个问题吗?
修改 此外,当尝试将Azure门户中的文件直接上传到容器时,我会收到
TestAzureFileUpload.txt的验证错误。详细信息:&#34;页面blob 大小必须与512字节边界对齐。当前文件大小是 56&#34;
这可能与我的问题有关吗?我在这里错过了一些设置吗?
我知道我没有足够的人在这里帮助我找出确切的问题,但我希望有人能指出我正确的方向来解决这个问题吗?
任何帮助将不胜感激
答案 0 :(得分:2)
我使用高级存储帐户来测试代码并获得与您相同的“400错误请求”。 从异常详细信息中,您可以看到“不支持阻止blob”消息。
Here is an image of my exception details
为了解决您的问题,我认为您应该知道块blob和页面blob之间的区别。
块blob 由块组成,每个块由块ID标识。您可以通过编写一组块并按块ID提交块来创建或修改块blob。它们适用于jpg,txt,log等离散存储对象。您通常将其视为本地操作系统中的文件。 仅受标准存储帐户支持。
Page blobs 是一组512字节页面,针对随机读写操作进行了优化,例如VHD。要创建页面blob,请初始化页面blob并指定页面blob将增长的最大大小。事实是,页面blob是为Azure虚拟机磁盘设计的。 支持标准和高级存储帐户。
由于您使用的是高级存储,目前仅可用于在Azure虚拟机使用的磁盘上存储数据。
所以我的建议是:
如果您希望应用程序支持流媒体和随机访问方案,并且能够从任何地方访问应用程序数据。您应该将块blob与标准帐户一起使用。
如果要升级和转移使用本机文件系统API的应用程序来读取和写入数据到永久磁盘。或者,您希望存储不需要从磁盘所连接的虚拟机外部访问的数据。你应该使用Page blobs。
参考链接: