注:小编新手一枚,本文主要是记录自己学习过程中遇到的问题,大神请绕路。
之前一直觉得ajax提交文件很复杂,于是都是通过form表单进行提交。于是今天遇到了一个问题,就是不知道怎么从后台获取返回值,于是开始考虑ajax的实现方法。
首先先写一个form表单(样式就不写了)
<form id="UploadForm" enctype="multipart/form-data" action="UploadFiles" method="post" target="upIfram">
<input type="file" id="upFile" name="upFile" onclick="this.form.reset();" />
</form>
<iframe id="upIframe" name="upIframe" style="display:none;"></iframe>
注:target在设置的iframe里打开,不然会跳转;
Ajax写法:
$("upFile").change(function(e){
var form=new FormData(document.getElementById("UploadForm"));
//var form=new FormData($("#UploadForm")[0]);
//以前一直以为document.getElementById()和$()是一样的,现在才知道$()[0]才是
$.ajax({
url:'@Url.Action("UploadFiles")',
type:'post',
data:form,
processData:false,
contentType:false,
success:function(data){
console.log("Success");
},
error:function(e){
console.log("Failed");
}
})
});
get();//此处为上传文件的进度条
后台方法:仅作参考
[HttpPost]
public JsonResult RfqUploadItem()
{
string resultMsg = string.Empty;
try
{
var upFile = Request.Files[0];
string upFileName = upFile.FileName;//文件名
string upFileSuffix = Path.GetExtension(upFileName);//文件后缀
if (upFileSuffix.ToLower() != ".xls")
{
throw new Exception("请上传xls文件");
}
else
{
string urlString = Request.UrlReferrer.OriginalString;
string rfqCode = urlString.Substring(urlString.IndexOf("RFQCode=") + 8, 14);//询价单号
Palau.Framework.Persistence.EntityManager manager = new EntityManager();
DataTable dt = DataTableToExcel.ImportToDataTable(upFile.InputStream, 0, 1);
List<string> listItem = new List<string>();
}
}
catch (Exception ex)
{
resultMsg = ex.Message;
}
finally
{
ViewBag.ResultMsg = resultMsg;
}
var resultmodel = new ResultModel<string>();
resultmodel.Message = resultMsg;
return Json(resultmodel);
}