2012-01-26 4 views
1

私は小さなプロジェクトにカヤックサーバを使用しています。 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)); 
       } 
      } 

**** 
} 

このコードが実行される:ここでそれは素晴らしい作品が、私はPNGやJPG画像のすべてのコードの

初の要求を持っているとき、私は問題を抱えています。私は画像の実際の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)); 
関連する問題