Azure Blob存储400错误请求

时间:2017-08-21 20:58:02

标签: c# azure azure-blob-storage

早上好,

我尝试使用提供的示例代码首次实施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);
}

以下是例外情况: enter image description here

这就是我必须继续下去的全部内容。我能想到的唯一另一件事就是我在我的开发环境中使用HTTP而不是HTTPS运行它。不确定这可能是个问题吗?

修改 此外,当尝试将Azure门户中的文件直接上传到容器时,我会收到

  

TestAzureFileUpload.txt的验证错误。详细信息:&#34;页面blob   大小必须与512字节边界对齐。当前文件大小是   56&#34;

这可能与我的问题有关吗?我在这里错过了一些设置吗?

我知道我没有足够的人在这里帮助我找出确切的问题,但我希望有人能指出我正确的方向来解决这个问题吗?

任何帮助将不胜感激

1 个答案:

答案 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。

参考链接:

Understanding Block Blobs, Append Blobs, and Page Blobs