2013-05-07 2 views
7

Я пытаюсь загрузить изображение через сообщение multipart/form-data, и я использую приведенный ниже код. Я только собираюсь загружать .jpg изображений.Загрузить изображение через форму сообщение

Проблема в том, что сохраненное изображение не является допустимым изображением, и его нельзя просмотреть. Это также на 200 байт больше, чем файл, который я загружаю, поэтому я предполагаю, что здесь что-то не хватает?

public class FileUploadController : ApiController 
{ 
    public Task<HttpResponseMessage> PostUploadFile() 
    { 
     return UploadFileAsync().ContinueWith<HttpResponseMessage>((tsk) => 
      { 
       HttpResponseMessage response = null; 

       if (tsk.IsCompleted) 
       { 
        response = new HttpResponseMessage(HttpStatusCode.Created); 
       } 
       else if (tsk.IsFaulted || tsk.IsCanceled) 
       { 
        response = 
        new HttpResponseMessage(HttpStatusCode.InternalServerError); 
       } 

       return response; 
      }); 
    } 

    public Task UploadFileAsync() 
    { 
     return this.Request.Content.ReadAsStreamAsync().ContinueWith((tsk) => 
     { SaveToFile(tsk.Result); }, 
     TaskContinuationOptions.OnlyOnRanToCompletion); 
    } 

    private void SaveToFile(Stream requestStream) 
    { 
     string path = 
     System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory); 
     using (FileStream targetStream = 
     File.Create(path + "/Uploads/" + DateTime.Now.ToFileTime() + ".jpg")) 
     { 
      using (requestStream) 
      { 
       requestStream.CopyTo(targetStream); 
      } 
     } 
    } 
} 

Вот простая форма, которую я использую для публикации изображения.

<form action="/api/postuploadfile" enctype="multipart/form-data" method="post"> 
    Upload Image: 
    <input type="file" id="imagename" name="imagename" /> 
    <input type="submit" /> 
</form> 

Информация об изображении, до/после:
Если я проверить свойство изображения я загрузил то Размер на диске такой же, как исходное изображение, но Размер недвижимости составляет 200-205 байт. Это всегда так, независимо от того, насколько сильно я загружаю изображение.

Вот часть заголовков POST. Мне не нужно снимать границу часть или что-нибудь еще?

Source 
-----------------------------1944294225892 Content-Disposition: form-data; 
name="imagename"; filename="small.jpg" Content-Type: image/jpeg 

И еще некоторые заголовки ...

Request Headers From Upload Stream 
Content-Length 125661 
Content-Type multipart/form-data; boundary=---------------------------1944294225892 
+0

Выглядит нормально, может быть, проблема с кодировкой? –

ответ

3

На самом деле вам нужно будет разобрать requestStream с какой-то многочастного парсер, как описано здесь, чтобы сдирать заголовок:

+0

Фантастический! Спасибо! Я включил открытый код со второй ссылки, и он сработал. – Niklas

Смежные вопросы