使用jquery和handler(ashx)上传文件
我正在尝试使用带有处理程序(c#)的jquery ajax上传文件。 问题是,当我调用处理程序时,我得到了
context.Request.File.Count=0
这是aspx代码:
$().ready(function () { $('#save').click(function (e) { CalluploaderHandler(); }); }); function CalluploaderHandler() { $.ajax({ type: "POST", url: "Services/UPloader.ashx", contentType: "application/json; charset=utf-8", success: OnComplete, error: OnFail }); return false; } function OnComplete(result) { alert('Success'); } function OnFail(result) { alert('Request failed'); }
c#代码处理程序:
/* handler*/ public void ProcessRequest(HttpContext context) { string savedFileName = ""; foreach (string file in context.Request.Files) { HttpPostedFile hpf = context.Request.Files[file] as HttpPostedFile; if (hpf.ContentLength == 0) continue; // savedFileName = context.Server.MapPath(Path.GetFileName(hpf.FileName)); // hpf.SaveAs(savedFileName); } context.Response.Write(savedFileName); }
我认为问题在于使用contentType
试试
contentType: 'multipart/form-data',
要么
contentType :'application/octet-stream';
有关更多信息,请参阅此post
使用jQuery.ajax发送multipart / formdata
您可以将此类代码添加到处理程序文件中。 然后你可以发布到这个url(whateverroot / yourhandler.ashx)
内容类型应为“multipart / form-data”。 例如:如果您使用的是HTML表单标记,则enctype =“multipart / form-data”。
public void ProcessRequest(HttpContext context) { var result = "0"; try { if (context.Request.Files.Count > 0) { HttpPostedFile file = null; for (int i = 0; i < context.Request.Files.Count; i++) { file = context.Request.Files[i]; if (file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(, fileName); file.SaveAs(path); result = "1"; } } } } catch { } context.Response.Write(result); }
你的代码……
$.ajax({ type: "POST", url: "Services/UPloader.ashx", contentType: "application/json; charset=utf-8", success: OnComplete, error: OnFail });
..缺少data
参数。 它当前的编写方式,没有任何东西被发送到处理程序。
您需要使用data
参数将文件传递给处理程序。 请浏览此链接: http : //www.aspdotnet-suresh.com/2015/02/jquery-upload-images-files-without-page-refresh-postaback-in-aspnet.html