在内存中创建FileStream而不是在磁盘上保存物理文件

时间:2017-10-19 20:57:56

标签: c# asp.net asp.net-mvc asp.net-web-api

我正在将文件上传到api,我必须将requestStream复制到FileStream才能将文件发布到API。我的下面的代码工作,但我必须将文件保存到临时文件夹以创建FileStream,然后我必须在操作后再次清理临时文件夹。是否有更清洁的方法 - 例如在内存中创建FileStream(如果可能)而不是将其保存到磁盘?

Stream requestStream = await Request.Content.ReadAsStreamAsync();

     //Create filestream by making a temporary physical file
     using (FileStream fileStream = System.IO.File.Create(@"C:\tempFolder\" fileName))                                     
     {
         await requestStream.CopyToAsync(fileStream);
         var postedFile = ms.CreateMedia(fileName, folder.Id, "file");                                    
         postedFile.SetValue("umbracoFile", fileName, fileStream);                                      
         ms.Save(postedFile);
     }

     // Clean up
     if ((System.IO.File.Exists(@"C:\tempFolder\" + fileName)))
     {
         System.IO.File.Delete(@"C:\tempFolder\" + fileName);
     }

2 个答案:

答案 0 :(得分:0)

为什么不直接使用requestStream?它是Stream的一个实例,您的API端点需要Stream的实例,除非您想添加不必要的开销,否则无需将requestStream的内容复制到任何中间点

Stream requestStream = await Request.Content.ReadAsStreamAsync();

var postedFile = ms.CreateMedia(fileName, folder.Id, "file");
postedFile.SetValue("umbracoFile", fileName, requestStream);
ms.Save(postedFile);

答案 1 :(得分:0)

.Net并未真正提供良好的内存解决方案。最好自己创建一个以节省资源并封装更多功能。

查看本指南here