2012-01-26 22 views
1

Я использую сервер Kayak для небольшого проекта. Он отлично работает, но у меня есть проблема, когда у меня есть запрос на PNG или JPG изображенияKayak server Заголовок ответа на вопрос

Прежде всего кода здесь:

public class RequestDelegate : IHttpRequestDelegate{ 
***** 
public void OnRequest(HttpRequestHead request, IDataProducer requestBody,IHttpResponseDelegate response){ 
***** 
else if (url.EndsWith("png")) 
      { 
       String fileName = url.Substring(url.IndexOf(@"\") + 1); 
       url = url.Substring(url.IndexOf(@"\") + 1); 
       url = Path.Combine(WebServerUtils.Instance.HtmlURL, url); 
       using (StreamReader streamReader = new StreamReader(url)) 
       { 
        String body = streamReader.ReadToEnd(); 
        var responseHeader = WebServerUtils.Instance.CreateResponseHeader(body.Length, "image/png"); 
        responseHeader.Headers.Add("Content-Disposition", "attachment; filename=" + fileName); 
        response.OnResponse(responseHeader, new BufferedProducer(body)); 
       } 
      } 

**** 
} 

Этот код выполняется, когда запрашивается изображение PNG. Очень просто найти реальный URL-адрес изображения, я прочитал его с помощью считывателя потоков. Затем я создать заголовок ответа ..

этой часть кода

var responseHeader = WebServerUtils.Instance.CreateResponseHeader(body.Length, "image/png"); 

здесь реализации

public HttpResponseHead CreateResponseHeader(int length, String type) 
     { 
      var _ResponseHeader = new HttpResponseHead() 
      { 
       Status = "200 OK", 
       Headers = new Dictionary<string, string>(){ 
        { "Content-Type", type }, 
        { "Content-Length", length.ToString() }, 
       } 
      }; 
      return _ResponseHeader; 
     } 

Теперь вот ситуация, когда я спрашиваю для страницы, не являющихся изображений являются оказаны. Когда я использую Firebug, чтобы увидеть, что произойдет .. здесь ошибка

Image corrupt or truncated: http://localhost:9090/Pedidos/back.png 

я упускаю что-то, когда я строю заголовок ответа?

Я не могу вернуться правильно изображение ..

Спасибо заранее надежде быть ясно, с объяснением.

ответ

1

Ну, это было очень просто .. Я использую Stream reader (это наследование от Text Reader). Я должен использовать поток памяти вместо считывателя Stream.

Вот код:

byte[] byteArray = new byte[0]; 
       using (Image img = Image.FromFile(url)) 
       { 

        using (MemoryStream stream = new MemoryStream()) 
        { 
         img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
         stream.Close(); 
         byteArray = stream.ToArray(); 
        } 

       } 

       String contentType = url.EndsWith("jpg") ? "image/jpg" : "image/png"; 
       var responseHeader = WebServerUtils.Instance.CreateResponseHeader(byteArray.Length, contentType); 
       responseHeader.Headers.Add("Content-Disposition", "attachment; filename=" + fileName); 
       response.OnResponse(responseHeader, new BufferedProducer(byteArray)); 
Смежные вопросы