2016-06-26 9 views
0

Ich habe eine ASP.NET-Anwendung mit Code hinter einer Seite, die mehrteilige POST-Anfrage kombiniert aus 2 Teilen: JSON und Byte-Steam, Audio. Der POST-Nachrichtentext sieht folgendermaßen aus:Prozess multipart (JSON + Byte-Stream) Post-Anfrage in C#

--8f2a0a01-2114-42ca-a176-51badb488534 
Content-Type: application/json; charset=utf-8 
Content-Disposition: form-data; name=jsonName 
{JSON} 
--8f2a0a01-2114-42ca-a176-51badb488534 
Content-Type: audio/wav 
Content-Disposition: form-data; name=audioName 
(byte stream) 
--8f2a0a01-2114-42ca-a176-51badb488534 

Mein Problem besteht darin, den Byte-Stream aus dem zweiten Teil (Audio) abzurufen. Ich habe verschiedene Techniken ausprobiert und jede API, die ich benutze, gibt mir diesen Bytestrom als String zurück und danach, wenn ich ihn in Datei serialisiere, kann die Datei nicht abgespielt werden. Zum Beispiel (aber nicht nur):

foreach (string key in HttpContext.Current.Request.Form.AllKeys) 
{ 
var multiPartValue = HttpContext.Current.Request.Form[key]; 
//DO SOMETHING 
} 

schloss ich, dass Transformation auf Zeichenfolge, die den Original-Audio-Byte-Stream korrumpiert und ich brauche den ursprünglichen Byte-Stream abzuzurufen wie (vielleicht byte []) ohne Transformation. Jeder Vorschlag, wie man dies umsetzen wird sehr

Antwort

0

geschätzt werden diese funktionieren könnte (kann nicht ohne entsprechende Client-Seite Code testen):

var content = new StreamContent(Request.InputStream); 
    content.Headers.ContentType = 
     System.Net.Http.Headers.MediaTypeHeaderValue.Parse(
      "multipart/form-data; 8f2a0a01-2114-42ca-a176-51badb488534"); 

    var streamProvider = content.ReadAsMultipartAsync().Result; 

    foreach (var contentPart in streamProvider.Contents) 
    { 
     if (contentPart.Headers.ContentType.MediaType == "audio/wav") 
     { 
      var bytes = contentPart.ReadAsByteArrayAsync().Result; 
     } 
    } 

Sie müssen zu Microsoft.AspNet.WebApi.Client installieren Paket

+0

Ich bin nicht im Zusammenhang mit Web-API-Controller, sondern in der Klasse, die System.Web.UI.Page erbt. Könnten Sie bitte Ihren Vorschlag an diese Einschränkung anpassen? –

+0

Ich versuchte vorgeschlagene Lösung für Web-Formulare. Ich bekomme Request.Files.Count = 0. Ich glaube nicht, dass dieser Byte-Stream überhaupt als Datei hochgeladen wurde, sondern eher als roher Byte-Stream, der wie bei der POST-Anforderung gesendet wurde. Wenn es eine Datei wäre, würde ich 'filename = SOME_FILE' am Ende des Content-Disposition Headers erwarten und es gibt keine –

+0

@MikkiMaus können Sie den clientseitigen Code posten? –