【发布时间】:2012-07-10 21:50:25
【问题描述】:
我使用 ajaxFileUploader 和 2 个处理程序进行文件上传和下载。
ajaxFileUploader 代码:
$.ajaxFileUpload
(
{
url: 'AjaxFileUploader.ashx?user=' + userId,
secureuri: false,
fileElementId: 'uploadControl',
dataType: 'json',
data: '{}',
success: function (mydata) {
alert("Image Successfully Uploaded");
$('#imgdefaultphoto').attr('src', 'ImageRetrieval.ashx?user=' + userId);
},
error: function () {
}
}
)
AjaxFileUploader.ashx 代码:
public void ProcessRequest(HttpContext context)
{
if (context.Request.Files.Count > 0)
{
string path = context.Server.MapPath("~/Temp");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
var file = context.Request.Files[0];
string userid = context.Request.QueryString["user"];
string fileName;
if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")
{
string[] files = file.FileName.Split(new char[] { '\\' });
fileName = files[files.Length - 1];
}
else
{
fileName = file.FileName;
}
string fileType = file.ContentType;
string strFileName = fileName;
int filelength = file.ContentLength;
byte[] imagebytes = new byte[filelength];
file.InputStream.Read(imagebytes, 0, filelength);
DBAccess dbacc = new DBAccess();
dbacc.saveImage(imagebytes, userid);
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var result = new { name = file.FileName };
context.Response.Write(serializer.Serialize(result));
}
ImageRetrieval.ashx 代码:
public void ProcessRequest(HttpContext context)
{
string userId = HttpContext.Current.Request.QueryString["user"];
if (userId != null)
{
DBAccess dbacc = new DBAccess();
DataTable dt = dbacc.getImage(userId);
context.Response.ContentType = "image/png";
context.Response.BinaryWrite((byte[])dt.Rows[0]["UserImage"]);
context.Response.Flush();
}
else
{
context.Response.Write("No Image Found");
}
}
图片正在上传到数据库,但是当我尝试加载它并将其附加到我的 img 标签时,图片标签显示损坏的图片。我不知道是什么原因导致或似乎是问题所在。任何帮助将不胜感激。谢谢!
编辑了一些行。还是没有运气。
【问题讨论】:
-
代码对我来说看起来不错,你能验证 ajax 调用 F12 在 chrome 中发生了什么吗,你在那里得到正确的结果并使用 context.Response.Flush();二进制写入后。
-
糟糕!忘了做f12。我有一些错误。加载资源失败:服务器响应状态为 404(未找到)。处理程序的名称与 .attr src 冲突。改了,还是一样的错误。
-
那么你的处理程序没有注册。
-
未注册是什么意思?
-
最后。我重新创建了处理程序并且它工作但我有一个转换错误。将参数值从 String 转换为 Byte[] 失败。似乎是什么问题?
标签: jquery ajax uploading handlers