【问题标题】:How to Upload Image From Asp.net Core IFormFile to Azure Blob Storage?如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?
【发布时间】:2019-03-04 19:16:01
【问题描述】:

我正在尝试将图像上传到 azure blob 存储。但是,当我在 azure 上查看最终结果时,它只会创建一个空文件。

   [HttpPost("Import")]
        public IActionResult Import(IFormFile filepond)
        {
            const string accountName = "accountName";
            const string key = "key14881851";

            var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, key), true);
            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("mycontainer");
            container.CreateIfNotExistsAsync();
            container.SetPermissionsAsync(new BlobContainerPermissions()
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });

            var blob = container.GetAppendBlobReference("test.jpg");
            blob.UploadFromStreamAsync(filepond.OpenReadStream());

            return Ok();
        }

一些问题(除了为什么我得到一个空文件)。

  1. 我看到很多这些方法都是异步的,我是否需要等待它们才能正常工作(即如果容器不存在,则在将文件写入容器之前创建它)
  2. 是否需要将 UploadFromStreamAsync 包装在 using 语句中。

【问题讨论】:

    标签: c# azure asp.net-core


    【解决方案1】:

    ...我是否需要等待它们才能正常工作(即如果容器不存在,则在将文件写入容器之前创建它)

    是的。异步方法返回一个任务,您必须等到该任务完成。这就是为什么你的文件是空的。

    我是否需要将 UploadFromStreamAsync 包装在 using 语句中。

    我会称之为更清洁,虽然我不确定这里是否绝对必要。

    我会这样写(未测试):

            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("mycontainer");
            await container.CreateIfNotExistsAsync();
            container.SetPermissionsAsync(new BlobContainerPermissions()
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });
    
            var blob = container.GetBlockBlobReference("test.jpg");
            using(var stream = filepond.OpenReadStream()) {
                await blob.UploadFromStreamAsync(stream);
            }
    

    请注意,我将 GetAppendBlobReference() 替换为 GetBlockBlobReference()。

    带有示例的文档https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=windows

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2021-01-16
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2013-07-29
      • 2014-05-22
      • 2017-09-21
      相关资源
      最近更新 更多