繁体   English   中英

如何在 C# 中将图像从本地系统上传到 azure blob 存储

[英]How to upload image from local system to azure blob storage in c#

我正在尝试使用 c# 将图像文件从本地系统上传到 azure blob 存储。 下面是我正在使用的代码:

string storageConnectionString = "<connection_string>";
CloudStorageAccount storageacc = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageacc.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("myblob");
container.CreateIfNotExists();

CloudBlockBlob blockBlob = container.GetBlockBlobReference("images");

using (var filestream = System.IO.File.OpenRead(@"C:\\Users\\John\\Desktop\\11173.jpg"))
{
    blockBlob.UploadFromStream(filestream);
}

我正在尝试创建名为myblob容器,我可以看到它已创建。 在其中我创建了一个带有名称images的 blob,然后将图像文件上传到其中。 但我看不到其中的图像文件。 上面的代码有什么问题。 如何将图像文件上传到 Blob 存储。 请帮忙。 谢谢

安装推荐的 nuget pkg "Azure.Storage.Blobs" ( https://www.nuget.org/packages/Azure.Storage.Blobs/ ) 后,以下代码在 .NET 核心中工作

       public void PersistPhoto(IFormFile fileToPersist, string saveAsFileName)
       {
            string connectionString= "Azure Storage Connection String";
            string containerName= "Azure Storage Container Name";
            BlobContainerClient container = new BlobContainerClient(connectionString, containerName);

            try
            {
                // Get a reference to a blob
                BlobClient blob = container.GetBlobClient(saveAsFileName);

                // Open the file and upload its data
                using (Stream file = fileToPersist.OpenReadStream())
                {
                    blob.Upload(file);                  
                }

                uri = blob.Uri.AbsoluteUri;
            }
            catch
            {
                // log error
            }
        }

根据微软的说法,NuGet 包“Microsoft.Azure.Storage.Blob”现在已被弃用。

请尝试以下操作:

string storageConnectionString = "<connection_string>";
CloudStorageAccount storageacc = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageacc.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("myblob");
container.CreateIfNotExists();

CloudBlockBlob blockBlob = container.GetBlockBlobReference("images/11173.jpg");
blockBlob.Properties.ContentType = "image/jpg";
using (var filestream = System.IO.File.OpenRead(@"C:\\Users\\John\\Desktop\\11173.jpg"))
{
    blockBlob.UploadFromStream(filestream);
}

基本上上面的代码将11173.jpg保存为images/11173.jpg Blob 名称实际上是images/11173.jpg

或者您可以尝试以下操作:

string storageConnectionString = "<connection_string>";
CloudStorageAccount storageacc = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageacc.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("myblob");
container.CreateIfNotExists();

CloudBlockBlob blockBlob = container.GetBlockBlobReference("11173.jpg");
blockBlob.Properties.ContentType = "image/jpg";
using (var filestream = System.IO.File.OpenRead(@"C:\\Users\\John\\Desktop\\11173.jpg"))
{
    blockBlob.UploadFromStream(filestream);
}

我认为你有两件事错了。

  1. myblob是您的容器吗? GetContainerReference 要求您传入容器的名称,而不是 blob 名称。 我猜容器名称是images
  2. GetBlockBlobReference需要包含您尝试上传的图像 (blob) 容器内的文件名的路径。

它应该是这样的:

string storageConnectionString = "<connection_string>";
CloudStorageAccount storageacc = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageacc.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("images");
container.CreateIfNotExists();

CloudBlockBlob blockBlob = container.GetBlockBlobReference("11173.jpg");

using (var filestream = System.IO.File.OpenRead(@"C:\\Users\\John\\Desktop\\11173.jpg"))
{
    blockBlob.UploadFromStream(filestream);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM