2017-06-07 1 views
0

donc je fait une Uploader dans mon API Web en utilisant des données de formulaire multipart mais le problème est quand je sauvegarder mes images à partir du fichier moi, il a donné également streamer le contenu icicomment supprimer le contenu des images lors de l'utilisation multipart

-----------------------------7e1e364095c 
Content-Disposition: form-data; name="file"; filename="C:\Users\kewin\Downloads\windows 10 pro.jpg" 
Content-Type: image/jpeg 

the binary starts from here   

et si je supprimer thoose 4 lignes que je peux regarder mes photos sont donc là un moyen de supprimer ce donc je suis seulement parti avec l'image

public async Task<IHttpActionResult> UploadImage(string fileName = "") 
    { 
     if (fileName == "") 
     { 
      fileName = Guid.NewGuid().ToString(); 
     } 
      if (!Request.Content.IsMimeMultipartContent("form-data")) 
     { 
      return BadRequest("Could not find file to upload"); 
     } 
     var provider = await Request.Content.ReadAsMultipartAsync(new InMemoryMultipartFormDataStreamProvider()); 

     var files = provider.Files; 
     var uploadedFile = files[0]; 
     var extension = ExtractExtension(uploadedFile); 
     var contentType = uploadedFile.Headers.ContentType.ToString(); 
     var savePath = ConfigurationManager.AppSettings["savePath"]; 
     var file = string.Concat(savePath, fileName, extension); 

     try 
     { 
      var request = HttpContext.Current.Request; 
      var fileDir = file + request.Headers[""]; 
      using (var fs = new FileStream(fileDir, FileMode.Create)) 
      { 
       request.InputStream.CopyTo(fs); 
      } 
      return Ok(); 
     } 

     catch (StorageException e) 
     { 
      return BadRequest(e.Message); 
     } 

     try 
     { 
       var fileInfo = new UploadedFileInfo 
      { 
       FileName = fileName, 
       FileExtension = extension, 
       ContentType = contentType, 
       FilePath = savePath + imageFile 
      }; 
      return Ok(fileInfo); 
     } 
+0

no. ce sont des métadonnées de sorte que vous pouvez accéder à ceux dans le serveur tels que file.FileName etc. –

Répondre

1

Actuellement, vous lisez des données d'image à partir request.InputStream, qui contient toute unparsed contenu en plusieurs parties, y compris les en-têtes dont vous n'avez pas besoin. Au lieu de cela, vous devez lire les données d'image de InMemoryMultipartFormDataStreamProvider que vous avez créées, qui analyse le flux d'entrée et vous permet d'accéder facilement aux en-têtes et au flux de données des fichiers téléchargés.

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

var files = provider.Files; 
var uploadedFile = files[0]; 
var extension = ExtractExtension(uploadedFile); 
var contentType = uploadedFile.Headers.ContentType.ToString(); 
var savePath = ConfigurationManager.AppSettings["savePath"]; 
var file = string.Concat(savePath, fileName, extension); 

try 
{ 
    using (var fs = new FileStream(file, FileMode.Create)) 
    { 
     await uploadedFile.CopyToAsync(fs); 
    } 
    return Ok(); 
} 
.... 
+0

génial qui a fait l'affaire –