我在C#中创建了一个Ashx处理程序,它根据传递给我的fileid
参数为我提供图像。我也有一个简单的工具提示预览脚本,我写的,这是无效的。您可以看到图像加载,但在加载后,图像就会消失。
我怀疑问题出在ASHX处理程序中,因为如果我使用静态图像,它可以正常工作。这是我的ASHX处理程序代码:
public void ProcessRequest(HttpContext context)
{
string fileId = HttpUtility.UrlDecode(context.Request.QueryString["fileId"] ?? "") ?? "";
string fullFileName = context.Server.MapPath("~/Uploads") + "\\" + fileId;
using (FileStream s = File.Open(fullFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
context.Response.ContentType = HelperClasses.Utility.GetMimeTypeFromMagic(fullFileName);
var buffer = new byte[s.Length];
s.Read(buffer, 0, (int) s.Length);
context.Response.BinaryWrite(buffer);
context.Response.Write(buffer);
s.Close();
}
context.Response.Flush();
context.Response.Close();
}
此外,我已创建a fiddle来演示此问题。
答案 0 :(得分:0)
您在回复结束时丢弃垃圾,特别是因为除了Response.Write
之外您还在调用BinaryWrite
。如果你看一下你的处理程序的响应,这就结束了(字面意思):
System.Byte []
显然,这不是图像的一部分。该行应删除:
context.Response.Write(buffer);
我还会avoid做Response.End
和Response.Close
之类的事情。让ASP.NET运行时处理它。
更好的是,如果您使用的是.NET Framework 4或更早版本,您可以简化整个过程:
s.CopyTo(context.Response.OutputStream);
答案 1 :(得分:0)
在您的代码中,行
context.Response.Close();
是个问题。 close方法突然结束响应流,详见here并查看相关问题IIS & Chrome: failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
将行替换为context.Response.End();
以正常结束响应。