2016-10-24 25 views
0

如何在web api中将文件的一部分读取为流并对此流执行操作而不将整个文件存储在内存中?注意:我不想在阅读之前将文件保存到任何地方 - 它会上传到web api控制器。Web API 2 - 流读取文件

但我真正想为实现以下伪代码:

foreach file in Request 
{ 
    using (var sr = new StreamReader(fileStream)) 
    { 
     string firstLine = sr.ReadLine() ?? ""; 
     if (firstLine contains the magic I need) 
     { 
      // would do something with this line, 
      // then scrap the stream and start reading the next file stream 
      continue; 
     } 
    } 
} 
+0

如果文件未保存,则表示是内存。否则,你不可能读取文件 – Tinwor

+0

因此,发布控制器时,从头开始将整个文件存储在内存中? – user2330270

+0

它不从客户端流? – user2330270

回答

0

由于这里找到:http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/

你可以在“力的Web API为处理上传的文件的流媒体模式,而比缓冲内存中的整个请求输入流。“

public class NoBufferPolicySelector : WebHostBufferPolicySelector 
{ 
    public override bool UseBufferedInputStream(object hostContext) 
    { 
     var context = hostContext as HttpContextBase; 

     if (context != null) 
     { 
     if (string.Equals(context.Request.RequestContext.RouteData.Values["controller"].ToString(), "uploading", StringComparison.InvariantCultureIgnoreCase)) 
      return false; 
     } 

     return true; 
    } 

    public override bool UseBufferedOutputStream(HttpResponseMessage response) 
    { 
     return base.UseBufferedOutputStream(response); 
    } 
} 

public interface IHostBufferPolicySelector 
{ 
    bool UseBufferedInputStream(object hostContext); 
    bool UseBufferedOutputStream(HttpResponseMessage response); 
} 

不幸的是,似乎你不能用Web API解决它,因为这是严重依赖于system.web。