2016-10-24 3 views
0

Как вы читаете только часть файла в виде потока в веб-api и выполняете действия в этом потоке, не беря весь файл в память? NB: я не хочу сохранять файл в любом месте перед чтением - он загружается в веб-контроллер 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/

Вы можете «Force 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.

 Смежные вопросы

  • Нет связанных вопросов^_^