皮划艇服务器图像响应标头

本文关键字:响应 图像 服务器 皮划艇 | 更新日期: 2023-09-27 18:21:41

我正在为一个小项目使用Kayak服务器。它工作得很好,但当我有一个png或jpg图像的请求时,我遇到了问题

首先代码在这里:

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

构建响应标头时是否遗漏了什么?

我无法正确返回图像。。

提前感谢,希望解释清楚。

皮划艇服务器图像响应标头

这很简单。。我正在使用流阅读器(它继承自文本阅读器)。。我必须使用内存流来代替流读取器。

这是代码:

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