使用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