如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?
Posted
技术标签:
【中文标题】如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?【英文标题】:How to Upload Image From Asp.net Core IFormFile to Azure Blob Storage? 【发布时间】: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();
一些问题(除了为什么我得到一个空文件)。
-
我看到很多这些方法都是异步的,我是否需要等待它们才能正常工作(即如果容器不存在,则在将文件写入容器之前创建它)
是否需要将 UploadFromStreamAsync 包装在 using 语句中。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core 2 从本地磁盘驱动器加载和显示图像
ASP.net core MVC Framework 5 Formdata在附加图像时类型不正确