微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 FormFile 转换为 Stream

如何解决将 FormFile 转换为 Stream

我正在做一个 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; 
    }
}

那里,我已经将 FormFile 对象 'file' 转换为 try 块中给出的 Stream 对象。
但不是将文件上传到 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);
}
,
    blockBlob.UploadFromStreamAsync(file.Openreadstream());

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.iformfile.openreadstream?view=aspnetcore-5.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。