gpt4 book ai didi

azure - 升级Azure Blob API 11->12,在12中找不到blob名称中的前导斜杠

转载 作者:行者123 更新时间:2023-12-03 02:15:37 24 4
gpt4 key购买 nike

我的项目是很久以前使用 Microsoft.Azure.Storage.Blob 构建的,我有许多包含许多文件的容器。我不确定这是怎么发生的,但我的所有文件夹结构中都有一个前导斜杠。在我尝试将代码升级到 Azure.Blobs (v12) 之前,这并不是一个问题。
当我在 Azure 门户中查看我的 blob 时,它在根文件夹中显示一个空白/,向下浏览时我看到它看起来像这样[容器] // [第一个文件夹]/[第二个文件夹]/[文件名]

Azure 门户在显示文件和下载文件时没有问题。当我查看属性时,URL 看起来像https://[account].blob.core.windows.net/[container]//folder1/folder2/file.ext

更新代码后,我发现container.GetBlobClient([folder+filename])不会检索任何文件。它总是得到 404。当我在调试器中查看它试图访问的 URL 时,它消除了双斜杠,所以它看起来像https://[account].blob.core.windows.net/[container]/folder1/folder2/file.ext

我尝试在 [文件夹+文件名] 前面添加一个斜杠,但它总是将其删除。前面加上两个斜杠也是如此。

我已经在谷歌上搜索了一整天,但找不到答案。有解决方法吗?我认为必须有,因为 Azure 门户和 Cloudberry Explorer 都可以访问和下载我的 blob。

最佳答案

一种可能的解决方法是创建 BlobClient 的实例使用 blob 的完整 URL。这样,前导斜杠就会被保留。

请看下面的代码。它使用 Azure.Storage.Blobs 版本 12.10.0

using System;
using System.Threading.Tasks;
using Azure.Storage;
using Azure.Storage.Blobs;

namespace SO71302870
{
class Program
{
private const string accountName = "account-name";

private const string accountKey = "account-key";

private const string containerName = "container-name";
private const string blobName = "/000/1.txt";//notice the leading slash (/) here.
static async Task Main(string[] args)
{
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
BlobClient blobClient =
new BlobClient(new Uri($"https://{accountName}.blob.core.windows.net/{containerName}/{blobName}"), credential);
var properties = await blobClient.GetPropertiesAsync();
Console.WriteLine(properties.Value.ContentLength);
}

}
}

关于azure - 升级Azure Blob API 11->12,在12中找不到blob名称中的前导斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71302870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com