Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将FormFile转换为流_C#_Asp.net Core Mvc_Azure Storage Blobs_Azure Blob Storage - Fatal编程技术网

C# 将FormFile转换为流

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

我正在做一个ASP.NET核心MVC web应用程序。web应用程序中有一个模块可以将文件上载到blob存储

以下是我用来将文件上载到blob存储器的函数:

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());