2012-01-26 61 views
1

我正在爲一個小項目使用Kayak服務器。它的偉大工程,但我有一個問題,當我有一個PNG或JPG圖像皮艇服務器圖片響應頭

首先把代碼的請求是在這裏:當請求PNG圖像執行

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

**** 
} 

此代碼。這非常簡單,我找到了圖像的真實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

那麼,這是非常簡單的..我使用流讀取器(它繼承文本閱讀器)..我必須使用一個內存流代替流讀者。

下面是代碼:

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