使用jquery.form 表单插件上传文件
准备工作:
1. vs2010导入NOPI的dll文件,如图:
一定要全部导入,要不然会报错的。
2. 页面引入jquery-form.js文件。
前端代码:
<script src="../js/jquery-form.js" type="text/javascript"></script>
//首先要引入jquery-form.js 下面jq上传要用到表单提交ajaxSubmit方法
//重要的事情是file要放在form中,且enctype要写对
//jquery方法
function importExcel() {
var row = $("#t_unit").datagrid('getSelected');
if ($("#uploadFile").val() == "") {
$.messager.alert('提示', "请选择导入的excel", 'info');
}
else {
var url = "CalRule.ashx?action=import&systemid=" + row.systemid + "&subsystem=" + row.subsystemid;
$("#import_file").ajaxSubmit({
type: "POST",
url: url,
success: function (result) {
if (result.status == 1) {
$("#uploadFile").val("");//上传成功清空浏览框
$.messager.alert('提示', result.msg, 'info');
grid.datagrid('reload');
}
else {
$.messager.alert('提示', result.msg, 'info');
}
}
});
}
}
后台处理代码:
public void GetDataFromExcel(HttpContext context)
{
//传子系统编号
string systemid = context.Request["systemid"];
string subsystem = context.Request["subsystem"];
string data_date = "";
Result res = new Result();
//接收文件
HttpPostedFile file = context.Request.Files["uploadFile"];
if (file != null && file.ContentLength > 0)
{
string fileName = System.IO.Path.GetFileName(file.FileName);
MessageBox.Show(fileName);
string savePath = System.Web.HttpContext.Current.Server.MapPath("~/file/");
FileOperatpr(fileName, savePath);
file.SaveAs(savePath + fileName);
try
{
using (ExcelHelper excelHelper = new ExcelHelper(savePath + fileName))
{
//将excel文件中的数据转换为table的数据
DataTable dt = excelHelper.ExcelToDataTable("MySheet", true);
if (dt != null && dt.Rows.Count > 0)
{
data_date = dt.Rows[1]["date"].ToString() + "-01";
//保存到数据库
Boolean flag = SaveExcel(dt, systemid, subsystem, data_date);
if (flag)
{
res.status = 1;
res.msg = "导入成功";
}
else
{
res.status = 0;
res.msg = "导入失败,请检查excel格式或下载模板重新编辑导入";
}
}
else
{
res.status = 0;
res.msg = "表数据为空";
}
}
}
catch (Exception ex)
{
res.status = 0;
res.msg = "导入失败";
Console.WriteLine("Exception: " + ex.Message);
}
}
var result = JsonConvert.SerializeObject(res);
context.Response.Clear();
context.Response.ContentType = "application/json";
context.Response.Write(result);
context.Response.Flush();
context.Response.End();
}
3. 一个小问题:文件上传当点击提交按钮时若还未浏览文件,可直接打开浏览框,选择文件后再次点击提交,方法如下:
if ($("#uploadFile").val() == "") {
$('#uploadFile').click();
// $.messager.alert('提示', "请选择导入的excel", 'info');
}
上传时,先判断是否浏览了文件,若尚未浏览文件则直接打开浏览框。