2016-08-24 1 views
1

J'ai un problème avec le téléchargement de fichiers du client vers l'API Web. Je reçois cette erreur "Fin inattendue du flux multi-parties MIME, le message multi-parties MIME n'est pas terminé." dans le contrôleur lorsque j'essaie de lire le contenu en plusieurs parties. I ma construction d'un React client JS avec superagent et voici mon code pour la demande:Fin inattendue du flux multi-parties MIME. Le message multi-parties MIME n'est pas complet. API Web et super agent

UploadFiles(files: File[]): Promise.IThenable<any> { 

    return this.Post("/Payment/files" , { 
     data: { 
      files: files 
     }, 
     headers: { 
      "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p", 
      "Content-Disposition": "form-data; name=Foo", 
     } 
    }); 
} 

Et voici mon code du contrôleur:

[Route("files")] 
[HttpPost] 
public async Task<HttpResponseMessage> UploadFiles() 
{ 
     string root = Path.GetTempPath(); 
     var provider = new MultipartFormDataStreamProvider(root); 

     Stream reqStream = Request.Content.ReadAsStreamAsync().Result; 
     MemoryStream tempStream = new MemoryStream(); 
     reqStream.CopyTo(tempStream); 

     tempStream.Seek(0, SeekOrigin.End); 
     StreamWriter writer = new StreamWriter(tempStream); 
     writer.WriteLine(); 
     writer.Flush(); 
     tempStream.Position = 0; 

     StreamContent streamContent = new StreamContent(tempStream); 
     foreach (var header in Request.Content.Headers) 
     { 
      streamContent.Headers.Add(header.Key, header.Value); 

     } 
     try 
     { 
      // Read the form data. 
      streamContent.LoadIntoBufferAsync().Wait(); 

      //This is where it bugs out 
      await streamContent.ReadAsMultipartAsync(provider); 


      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 

} 

Répondre

3

Je pense que la question ici est causée par:

headers: { 
      "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p", 
      "Content-Disposition": "form-data; name=Foo", 
     } 

J'ai eu un problème similaire et a été résolu en supprimant les paramètres d'en-tête, je devine que le superagent les ajoute automatiquement.

0

Je résolu ce problème en faisant ceci:

headers: { 
       "Content-Disposition": "form-data; name=Foo", 
       "enctype": "multipart/form-data" 
      } 
+0

peut me montrer comment corriger !? – pcking60