c# - 将 FormFile 转换为流

标签 c# asp.net-core-mvc azure-blob-storage

我正在做一个 ASP .NET Core 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; 
    }
}
在那里,我已经投下了 表格文件 对象 'file'直播 try 中给出的对象堵塞。
但不是将文件上传到 blob 存储,而是给出 异常(exception):

Unable to cast object of type 'Microsoft.AspNetCore.Http.FormFile' to type 'System.io.stream'


问题:
是否可以将 IFormFile 对象转换为 Stream 或者是否有其他适当的方法可以做到这一点?
谢谢你。
PS:要获取输入文件,我必须使用 FormFile 类型对象,但要将文件上传到 blob 存储,我必须使用 Stream 类型对象。因此,无论如何,要解决这个问题,我必须将输入 FormFile 转换为 Stream 类型的对象。

最佳答案

您可以创建一个 MemoryStream 并将表单文件的内容复制到其中,然后上传内存流的内容。

using(var ms = new MemoryStream()) {
    await file.CopyToAsync(ms);
    ms.Seek(0, SeekOrigin.Begin);
    blockBlob.UploadFromStreamAsync(ms);
}

关于c# - 将 FormFile 转换为流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67000738/

相关文章:

c# - 在动态范围内寻找局部最大值

c# - 在默认构造函数中初始化的 JSON.Net 集合未被反序列化的 JSON 覆盖

c# - Razor Pages 在类方法之间保存数据

azure - 从 Azure Blob 存储中的任何身份验证检查中排除 sig querystring 参数

c# - 在 c# 中通过拨号调制解调器在没有互联网的情况下连接两台计算机

c# - 如何避免 json 对象中的逗号?

asp.net-core - 在 ASP.NET Core 3.x MVC 中将 nameof() 与 Url.Action() 和异步方法一起使用

migration - WebApiCompatShim - 如何使用 MVC 6 配置 REST api

linux - Azcopy 409 此存储帐户不允许公共(public)访问

Azure Blob 错误 : StorageException: The condition specified using HTTP conditional header(s) is not met