簡體   English   中英

如何將圖像從 Asp.net Core IFormFile 上傳到 Azure Blob 存儲?

[英]How to Upload Image From Asp.net Core IFormFile to Azure Blob Storage?

我正在嘗試將圖像上傳到 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 語句中。

...我是否需要等待它們才能正常工作(即,如果容器不存在,則在將文件寫入容器之前創建它)

是的。 異步方法返回一個任務,您必須等到該任務完成。 這就是為什么你的文件是空的。

我是否需要將 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);
        }

請注意,我用 GetBlockBlobReference() 替換了 GetAppendBlobReference()。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM