C# 将FormFile转换为流
我正在做一个ASP.NET核心MVC web应用程序。web应用程序中有一个模块可以将文件上载到blob存储 以下是我用来将文件上载到blob存储器的函数:C# 将FormFile转换为流,c#,asp.net-core-mvc,azure-storage-blobs,azure-blob-storage,C#,Asp.net Core Mvc,Azure Storage Blobs,Azure Blob Storage,我正在做一个ASP.NET核心MVC web应用程序。web应用程序中有一个模块可以将文件上载到blob存储 以下是我用来将文件上载到blob存储器的函数: public CloudBlockBlob UploadBlob(string BlobName, string ContainerName, IFormFile file) { CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); Clou
public CloudBlockBlob UploadBlob(string BlobName, string ContainerName, IFormFile file)
{
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(ContainerName.ToLower());
CloudBlockBlob blockBlob = container.GetBlockBlobReference(BlobName);
try
{
blockBlob.UploadFromStreamAsync((Stream) file); //trying to convert FormFile to Stream type object and upload to blob storage
return blockBlob;
}
catch (Exception e)
{
var r = e.Message;
return null;
}
}
在那里,我已经将FormFile对象'file'
转换为Stream对象,如try
块中所示。但不是将文件上载到blob存储,而是给出异常:
无法将类型为“Microsoft.AspNetCore.Http.FormFile”的对象强制转换为类型为“System.io.stream”
问题:是否可以将IFormFile对象强制转换为流,或者是否有其他合适的方法来执行此操作 多谢各位
PS:要获取输入文件,我必须使用FormFile类型对象,但要将文件上载到blob存储,我必须使用Stream类型对象。因此,无论如何,要解决这个问题,我必须将输入FormFile转换为Stream类型的对象。您可以创建一个MemoryStream并将表单文件的内容复制到其中,然后上载内存流的内容
using(var ms = new MemoryStream()) {
await file.CopyToAsync(ms);
ms.Seek(0, SeekOrigin.Begin);
blockBlob.UploadFromStreamAsync(ms);
}
卡尔先生,谢谢你的回答。你能解释一下这个取消代币是什么吗?我没有得到它。哦,对不起,从我当前的一些代码中复制了这个。CancellationToken用于取消异步调用链。如果不在项目中使用它们,您可以将其删除。是的,您的代码运行得很好。我非常感谢你明确的回答。
blockBlob.UploadFromStreamAsync(file.Openreadstream());