c# - 将 FormFile 转换为流
问题描述
我正在做一个 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'
转换为块中给出的Streamtry
对象。
但不是将文件上传到 blob 存储,而是给出异常:
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);
}
推荐阅读
- linux - 为什么“gnome-screensaver-command -q > test.txt”不输出到文件?
- trains - Trains 应该如何与 RayTune 等超参数优化工具一起使用?
- node.js - 对可观察的 Promise 的 Node js 循环
- python - Python将两个不同的列表转换为列表列表
- amazon-web-services - 设置 Lambda IAM 策略以访问 Cognito
- firebase - Firestore [ReferenceError:找不到变量:xxx]
- marklogic - 如何在 XQuery 中重复函数调用?
- osrm - 是否有任何已处理的 OSRM 文件存储库?
- netsuite - 您如何搜索所有高级 PDF 模板
- windows - 如何检查给定的路径是文件还是文件夹?