我正在尝试使用带有处理程序(c#)的jquery ajax上传文件。问题是,当我调用处理程序时,我得到了
context.Request.File.Count=0
这是aspx代码:
<!--aspx file code-->
<script language="javascript" type="text/javascript">
$().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');
}
</script>
</head>
<body>
<form enctype="multipart/form-data">
<label for="file">
Filename:</label>
<input name="file" id="file" type="file">
<input id="save" name="submit" value="Submit" type="submit">
</form>
</body>
</html>
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);
}
答案 0 :(得分:3)
我认为问题在于contentType
尝试
contentType: 'multipart/form-data',
OR
contentType :'application/octet-stream';
请参阅此帖子了解更多信息
答案 1 :(得分:3)
您可以将此类代码添加到处理程序文件中。然后你可以发布到这个网址(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(<somepath>, fileName);
file.SaveAs(path);
result = "1";
}
}
}
}
catch { }
context.Response.Write(result);
}
答案 2 :(得分:2)
您的代码......
$.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