2014-05-02 2 views
8

Grundsätzlich möchte ich eine Datei zu einer Web-API streamen und sobald ich innerhalb der Web-API-Controller möchte ich Daten über einen Stream-Reader zu niedrigeren Ebene Logik übergeben. Ich habe versucht, den Code von einem anderen gefunden SO mit einigen Änderungen veröffentlichen, aber ich bekomme:Datei-Streaming-Upload über Web-API zu einem StreamReader

Ein asynchroner Modul oder Handler abgeschlossen, während ein asynchronen Betrieb noch anhängig war.

public async void Put(int id, HttpRequestMessage request) 
    { 
     if (!Request.Content.IsMimeMultipartContent()) 
      throw new InvalidOperationException(); 

     var provider = new MultipartMemoryStreamProvider(); 
     await Request.Content.ReadAsMultipartAsync(provider); 

     var file = provider.Contents.First(); 
     var filename = file.Headers.ContentDisposition.FileName.Trim('\"'); 
     var buffer = await file.ReadAsByteArrayAsync(); 
     var stream = new MemoryStream(buffer); 

     using (var s = new StreamReader(stream)) 
     { 
      saveFile.Execute(id, s); 
     } 
    } 

Ich bin offen für andere Lösungen, solange ich die Daten am Streaming, wie es kommt. Ich bin neu zu warten und async und ich bin wahrscheinlich ein Grundfehler zu machen. Irgendwelche Ideen?

+3

Ich bin ich richtig zu sagen, dass die gesamte Datei zu einem bestimmten Zeitpunkt im Speicher? Ich denke, es ist in der Var "Puffer" gehalten, wenn ich mich nicht irre. –

Antwort

6

ändern async void-async Task