【问题标题】:Azure Blob Storage 400 Bad RequestAzure Blob 存储 400 错误请求
【发布时间】:2018-01-30 00:26:03
【问题描述】:

早上好,

我第一次尝试使用他们提供的示例代码来实现 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 的验证错误。详细信息:“页面 blob size 必须与 512 字节边界对齐。当前文件大小为 56。”

这可能与我的问题有关吗?我在这里缺少一些设置吗?

我知道我没有足够的时间让任何人帮助我确定确切的问题,但我希望有人至少可以为我指出正确的方向来解决这个问题?

任何帮助将不胜感激

【问题讨论】:

  • 正如我所提到的,这不是我的问题。如果您查看我的代码,您会发现我的容器和 blob 名称都是小写的。谢谢回复
  • 就在上面写了,抱歉。
  • 当你得到异常时,你能不能展开RequestInformation节点并包含那里显示的所有东西。通常您会找到有关该错误的更多信息。从您的 2 次尝试中进行疯狂猜测,我假设相关存储帐户的冗余级别为 Premium_LRS。你能确认一下吗?如果是这种情况,那么您将收到此错误,因为 Premium_LRS 存储帐户仅支持页面 blob,并且您正在尝试在其中上传块 blob。

标签: c# azure azure-blob-storage


【解决方案1】:

我使用高级存储帐户来测试代码并获得与您相同的“400 错误请求”。 从异常详细信息中,您可以看到“不支持块 blob”消息。

Here is an image of my exception details

为了解决你的问题,我想你应该知道block blob和page blob的区别。

块 blob 由块组成,每个块都由块 ID 标识。您可以通过编写一组块并通过其块 ID 提交它们来创建或修改块 blob。它们适用于您的离散存储对象,例如 jpg、txt、日志等。您通常会在本地操作系统中将其视为文件。 仅标准存储帐户支持。

页面 blob 是针对随机读写操作(例如 VHD)优化的 512 字节页面的集合。若要创建页 Blob,请初始化页 Blob 并指定页 Blob 将增长的最大大小。事实上,页面 blob 是为 Azure 虚拟机磁盘设计的。 标准和高级存储帐户均支持。

由于您使用的是高级存储,它目前仅可用于在 Azure 虚拟机使用的磁盘上存储数据。

所以我的建议是:

如果您希望您的应用程序支持流式和随机访问场景,并能够从任何地方访问应用程序数据。您应该在标准帐户中使用块 blob。

如果您想提升和转移使用本机文件系统 API 来读取数据并将数据写入永久性磁盘的应用程序。或者,您想要存储不需要从磁盘所连接的虚拟机外部访问的数据。您应该使用 Page blob。

参考链接:

Understanding Block Blobs, Append Blobs, and Page Blobs

【讨论】:

  • 这是另一个参考链接(因为我的声誉不足以发布两个链接)您可以了解Deciding when to use Azure Blobs, Azure Files, or Azure Data Disks
  • 这正是我的问题!谢谢!升级我的帐户解决了这个问题。
  • 感谢您提供异常详细信息的屏幕截图。快速浏览了一下,但我不应该看到任何其他信息。这帮助很大!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2014-08-19
  • 2019-01-20
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多