HttpPostedFile.InputSteam读取文件内容
最近在做一个项目,需要读取上传的图片信息与数据库中的图片做吻合比较,于是想到在上传图片的处理逻辑ashx文件中将上传的图片存储为二进制值, 再与数据库中的值做匹配测试.代码如下
//.ashx
public class SaveHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
HttpPostedFile file = context.Request.Files["Filedata"];
if (file != null)
{
byte[] photoValue = new byte[file.ContentLength];
file.InputStream.BeginRead(photoValue, 0, file.ContentLength, null, "1");
context.Response.Write("1");
}
else
{
context.Response.Write("0");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
发现取出来的photoValue在上传一张照片时没有任何问题, 但在上传超过3张图片时,就只能保存上传队列的第一张图片.其余的二进制值全为0.请教各位大神出现这个问题的原因是什么,如何解决呢?
令我非常不解的是:如果在ashx中调用saveAs方法保存文件,上传超过3张图片将没有任何问题,处理代码如下:
图片 二进制 HttpPostedFile --------------------编程问答-------------------- 拷贝一个副本再来操作 --------------------编程问答-------------------- 现在想了一个比较笨的办法,先用saveAs方法保存为图片,再读取图片转换成二进制值.但是上述这个问题觉得很诡异, 所以想搞明白它. --------------------编程问答-------------------- 你这2段代码说明不了任何问题,我唯一想到的是你操作失误,放进 photoValue 就释放file, --------------------编程问答-------------------- 3楼能说得详细点吗? 如何释放file?
public class SaveHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
HttpPostedFile file = context.Request.Files["Filedata"];
if (file != null)
{
string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\";
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
file.SaveAs(uploadPath + file.FileName);
context.Response.Write("1");
}
else
{
context.Response.Write("0");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
补充:.NET技术 , ASP.NET