gpt4 book ai didi

c# - Kayak 服务器图像响应头

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:13:05 26 4
gpt4 key购买 nike

我正在为一个小项目使用 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 路径,我用流阅读器读取它。然后我创建响应 header ..

这部分代码

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

我在构建响应 header 时是否遗漏了什么?

我无法正确返回图像..

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

最佳答案

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

代码如下:

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

关于c# - Kayak 服务器图像响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com