我正在将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
我在构建响应标题时是否遗漏了某些内容?
我无法正确回复图片..
在此先感谢希望通过解释明确。
答案 0 :(得分:1)
嗯,这很简单..我正在使用Stream阅读器(它继承自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));