2016-06-26 1 views
0

J'ai une application ASP.NET avec le code derrière une page servant une requête POST en plusieurs parties combinées de 2 parties: JSON et octets de vapeur représentant l'audio. Le corps POST ressemble à ceci:Processus multipart (JSON + flux d'octets) Post demande en 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 

Mon problème est de récupérer le flux d'octets à partir de la deuxième partie (audio). J'ai essayé plusieurs techniques et n'importe quelle API que j'utilise me renvoie ce flux d'octets sous forme de chaîne et après cela quand je le sérialise pour classer le fichier ne peut pas être joué. Par exemple (mais pas seulement):

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

Je conclus que la transformation de la chaîne corrompt le flux d'octets audio d'origine et je dois récupérer le flux d'octets d'origine comme cela est (peut-être byte []) sans aucune transformation. Toute suggestion sur la façon de mettre en œuvre ce sera très apprécié

Répondre

0

Cela pourrait fonctionner (ne peut pas tester sans code côté client approprié):

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; 
     } 
    } 

Vous devez installer Microsoft.AspNet.WebApi.Client package

+0

Je ne suis pas dans le contexte du contrôleur Web API, mais dans la classe qui hérite de System.Web.UI.Page. Pourriez-vous ajuster votre suggestion à cette contrainte? –

+0

J'ai essayé la solution proposée pour les formulaires Web. Je reçois Request.Files.Count = 0. Je ne pense pas que le flux d'octets ait été uploadé en tant que fichier mais plutôt comme un flux d'octets bruts poussé comme il est en requête POST. S'il s'agissait d'un fichier je m'attendais à 'filename = SOME_FILE' à la fin de l'en-tête Content-Disposition et il n'y en a aucun –

+0

@MikkiMaus pouvez-vous poster le code côté client? –