Recevoir, envoyer un fichier sur le Web Api

Je suis en train d'écrire un WebApi service qui reçoit un dossier, une simple manipulation, et envoie le fichier. Je vais avoir des questions sur l'envoi ou de la réception du dossier par le service.

La question que je vais avoir, c'est que le fichier renvoyé par la fonction est de ~1,5 x plus grand que le fichier manipulé, par exemple, lorsque le fichier est renvoyé, c'est comme 300 ko au lieu de les 200ko il devrait être.

Je suppose que sa fait d'être enveloppé et ou de les manipuler en quelque sorte, et je ne suis pas sûr de la façon de le recevoir correctement. Le code de la WebAPI service et la méthode qui appelle le service web sont inclus ci-dessous

La WebApi service, lorsque je tape la ligne de return Ok(bufferResult), le fichier est un byte[253312]

Dans la méthode qui appelle le service web, une fois que le fichier est manipulé et retourné, à la suite de la ligne var content = stream.Result;, le flux a une longueur de 337754 octets.

API Web service code

public ConversionController: APIController{
  public async Task<IHttpActionResult> TransformImage()
   {
    if (!Request.Content.IsMimeMultipartContent())
        throw new Exception();

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

//[file manipulations omitted;]
    //[the result is populated into a MemoryStream named response ]

    //debug : save memory stream to disk to make sure tranformation is successfull
    /*response.Position  = 0;
      path = @"C:\temp\file.ext";
      using (var fileStream = System.IO.File.Create(path))
      {
        saveStream.CopyTo(fileStream);
      }*/


    var bufferResult = response.GetBuffer();
    return Ok(bufferResult);
   }
}

Méthode d'Appeler le Service

public async Task<ActionResult> AsyncConvert()
    {

    var url = "http://localhost:49246/api/conversion/transformImage";   
var filepath = "drive/file/path.ext";
    HttpContent fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filepath));

    using (var client = new HttpClient())
    {
        using (var formData = new MultipartFormDataContent())
        {
            formData.Add(fileContent, "file", "fileName");

    //call service
            var response = client.PostAsync(url, formData).Result;

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception();
            }
            else
            {

                if (response.Content.GetType() != typeof(System.Net.Http.StreamContent))
                    throw new Exception();

                var stream = response.Content.ReadAsStreamAsync();
                var content = stream.Result;

                var path = @"drive\completed\name.ext";
                using (var fileStream = System.IO.File.Create(path))
                {
                    content.CopyTo(fileStream);  
                }
            }
        }


    }

    return null;
}

Je suis encore nouveau dans les ruisseaux et WebApi, donc j'ai peut-être raté quelque chose tout à fait évidente. Pourquoi les flux de fichiers de différentes tailles? (eg. est-il enveloppé et comment puis-je enlever la pellicule et/ou recevoir le flux)

OriginalL'auteur user1778606 | 2013-12-29