gpt4 book ai didi

c# - Azure Blob 存储 - 上传 Blob 后如何获取 Blob 存储 ID?

转载 作者:行者123 更新时间:2023-12-03 01:26:19 53 4
gpt4 key购买 nike

我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数据库中。如何找到已保存项目的 ID。这是命令:

Azure.Response<BlobContentInfo> blobs = containerClient.UploadBlob(fileName, outStream);

我似乎在返回的对象中找不到它

https://learn.microsoft.com/en-us/dotnet/api/azure.storage.blobs.models.blobcontentinfo?view=azure-dotnet

我的原始图片是使用 PowerApps 创建和保存的,其中控件确实返回 Blob ID - 见下文:

 Set(
gblSentBlob,
AzureBlobStorage.CreateFile(
Text(gblAzureFileContainer),
GUID() & ".jpg",
camControl.Photo
)
);
If(
!IsEmpty(gblSentBlob),
Notify("Picture saved to Azure storage:" & gblSentBlob.DisplayName);
UpdateContext({locFileName: gblSentBlob.DisplayName});
UpdateContext({locAzureStorageID: Text(gblSentBlob.Id)}); // <- *** this is the Blob ID ***
UpdateContext({locSavedToAzure: true});

这里,AzureBlobStorage.CreateFile 函数返回一个对象,其中包含我正在查找的 ID。

如何在控制台应用程序中获取此 ID。

典型的 Blob ID 如下所示:

JTJmc2hpcmVibG9iY29udGFpbmVyJTJmNTk3MzQ4NGYtNGVhNy00NzJkLTkyMzQtYWIwNzM5NWNlOGRiLmpwZw==

然后我可以使用以下命令检索图像以供显示(在 PowerApps 中)

AzureBlobStorage.GetFileContent(ThisItem.BlobStorageID)

我的完整代码:

 var blobClient = containerClient.GetBlobClient(blobName);
using Stream stream = await blobClient.OpenReadAsync();
Image myImage = Image.FromStream(stream);
Image myThumbnail = PictureProcessor.returnThumbnail(myImage);
// now save this image

string guid = Guid.NewGuid().ToString();
string fileName = guid + ".jpg";
//create a memory stream ready for the rescaled image
Stream outStream = new MemoryStream();

myThumbnail.Save(outStream, System.Drawing.Imaging.ImageFormat.Jpeg);

Console.WriteLine(
"Length = {0}, Position = {1}\n",
outStream.Length.ToString(),
outStream.Position.ToString());

outStream.Position = 0;
Azure.Response<BlobContentInfo> blobs = containerClient.UploadBlob(fileName, outStream);

Console.WriteLine("blobs RETURN OBJECT: " + blobs.ToString());
Console.WriteLine("blobs GetRawResponse: " + blobs.GetRawResponse());

Console.ReadKey();

最佳答案

当我将其从 Base64 解码然后解码为 UTF-8 时:

JTJmc2hpcmVibG9iY29udGFpbmVyJTJmNTk3MzQ4NGYtNGVhNy00NzJkLTkyMzQtYWIwNzM5NWNlOGRiLmpwZw==

我得到了这个:

%2fshireblobcontainer%2f5973484f-4ea7-472d-9234-ab07395ce8db.jpg

因此,您的“Blob ID”似乎是您传递到 AzureBlobStorage.CreateFile< 的 URL 编码字符串值的 UTF-8(或 7 位 ASCII?)表示形式的 Base64 编码表示形式 的第二个参数。

所以这样做:

String powerAppsBlobId = @"JTJmc2hpcmVibG9iY29udGFpbmVyJTJmNTk3MzQ4NGYtNGVhNy00NzJkLTkyMzQtYWIwNzM5NWNlOGRiLmpwZw==";

Byte[] blobIdBytes = Convert.FromBase64String( powerAppsBlobId );

String urlEncodedBlobName = Encoding.UTF8.GetString( bytes );

String actualBlobName = Uri.UnescapeDataString( urlEncodedBlobName );

Console.WriteLine( actualBlobName )

该程序将打印以下内容:

/shireblobcontainer/5973484f-4ea7-472d-9234-ab07395ce8db.jpg

关于c# - Azure Blob 存储 - 上传 Blob 后如何获取 Blob 存储 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65808279/

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