前端

<form class="layui-form" id="div_imp" style="display:none;">
<div class="layui-row">
<div class="layui-col-xs11">
<div class="layui-form-item">
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-xs11">
<div class="layui-form-item">
<label for="Goodsno" class="layui-form-label">
<span>附件</span>
</label>
<div class="layui-input-block">
<input type="file" name="goodsfile" id="goodsfile" class="layui-input" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
</div>
</div>
</div>
<div class="layui-col-xs11">
<div class="layui-form-item">
<label for="Goodsno" class="layui-form-label">
<span></span>
</label>
<div class="layui-input-block">
<span class="we-red"><a href="~/import/商品导入模板.xlsx">点我下载最新模板</a></span>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
</label>
<button class="layui-btn" lay-filter="import" lay-submit="" onclick="import_submit()">导入</button>
</div>
</div>
</form>
<javascript>
function import_submit() {
var file;
$('#import').attr('disabled', true);//.find('i').removeClass('layui-hide');
var fordata = new FormData();
fordata.append("file", $('#goodsfile')[0].files[0]); //传给后台的file的key值是可以自己定义的
$.ajax({
url: "/Goods/Import",
type: "POST",
data: fordata,
cache: false,
processData: false,
contentType: false,
success: function (res) {
if (res.code == 0) {
parent.layer.close(index);
parent.layer.msg('导入成功', { time: 3000 });
parent.table.reload("test", { where: { "key": $("#goodsname").val() } });
} else {
layer.msg("导入失败 " + res.msg, { time: 3000 });
$('#add').attr('disabled', false).find('i').removeClass('layui-hide');
}
},
error: function (e) {
$('#add').attr('disabled', false).find('i').removeClass('layui-hide');
layer.msg("导入失败 " + res.msg, { time: 3000 });
}
});
}
</script>

后端

[HttpPost]
        public IActionResult Import([FromForm(Name = "file")]IFormFile excelfile)
        {
            HandleResult<string> result = new HandleResult<string>{ Code=(int)StatusCodeEnum.ERROR_SYSTEM, success=false, Msg=StatusCodeEnum.ERROR_SYSTEM.ToDescription() };
            string sWebRootFolder = _hostingEnvironment.WebRootPath+ @"\import_tmp\";
            string sFileName = $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}-{Guid.NewGuid()}.xlsx";
            FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            if (file.Exists)
            {
                file.Delete();
                file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
            }
            try
            {
                using (FileStream fs = new FileStream(file.ToString(), FileMode.Create))
                {
                    excelfile.CopyTo(fs);
                    fs.Flush();
                }
                using (ExcelPackage package = new ExcelPackage(file))
                {
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                    int rowCount = worksheet.Dimension.Rows;
                    int ColCount = worksheet.Dimension.Columns;
                    var goods = new List<pub_goods>();
                    if (file.Exists)
                    {
                        file.Delete();
                    }
                    for (int row =2; row <= rowCount; row++)
                    {
                        
                            pub_goods pub_Goods = new pub_goods();
                            pub_Goods.GoodsID = Guid.NewGuid().ToString();
                            pub_Goods.CompanyID = Application.WebContext.CompanyID;
                            pub_Goods.State = "1";
                            pub_Goods.Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                            pub_Goods.Is_del = "0";
                            pub_Goods.Goodsno = worksheet.Cells[row, 1].Value == null ? "" : worksheet.Cells[row,1].Value.ToString();
                            pub_Goods.Goodsname = worksheet.Cells[row,2].Value == null ? "" : worksheet.Cells[row, 2].Value.ToString();
                            pub_Goods.Goodstype = worksheet.Cells[row, 3].Value == null ? "" : worksheet.Cells[row, 3].Value.ToString();
                            pub_Goods.Unit = worksheet.Cells[row, 4].Value == null ? "" : worksheet.Cells[row, 4].Value.ToString();
                            pub_Goods.Goodscode = worksheet.Cells[row, 5].Value == null ? "" : worksheet.Cells[row, 5].Value.ToString();
                            pub_Goods.Approval = worksheet.Cells[row, 6].Value == null ? "" : worksheet.Cells[row, 6].Value.ToString();
                            pub_Goods.Factory = worksheet.Cells[row, 7].Value == null ? "" : worksheet.Cells[row, 7].Value.ToString();
                            pub_Goods.dosage = worksheet.Cells[row, 8].Value==null?"": worksheet.Cells[row, 8].Value.ToString();
                            goods.Add(pub_Goods);
                       
                    }
                    
                    result =_goodsService.AddListAsync(goods).Result;
                }
            }
            catch (Exception ex)
            {
                Logger.Default.ProcessError((int)StatusCodeEnum.ERROR_SYSTEM, ex.Message);
            }
            return Ok(result);
        }

技术要点:

1.上传附件<input type="file" name="goodsfile" id="goodsfile" class="layui-input" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">

accept可设置默认允许的文件类型,也可选择其他文件类型,需要后台加判断限制文件类型.

2.使用IFormFile一定要加上[FromForm(Name = "file")],否则IFormFile为null,file为前端自定义的文件参数名

3.附件添加 var fordata = new FormData();  fordata.append("file", $('#goodsfile')[0].files[0]);  processData和contentType一定要设为false

最新文章

  1. 51nod 简单的动态规划
  2. Angular2 管道
  3. asp.net环境搭建
  4. [原创]Matlab之GUI生成EXE文件
  5. 100款免费的圣诞节矢量图标素材(PSD &amp; SVG)
  6. Magento的价格去掉小数点
  7. linux shell 参数传递
  8. 《HTML5与CSS3基础教程》学习笔记 ——Three Day
  9. An Easy Task
  10. centos7 部署ssserver
  11. C#项目代码风格要求(转)
  12. eclipse 新建servlet
  13. How to: Installshield做安装包时如何添加文件
  14. HDU 6047 Maximum Sequence(线段树)
  15. Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析
  16. python3中用HTMLTestRunner.py报ImportError: No module named &#39;StringIO&#39;解决办法
  17. mysql常见查询练习题
  18. 机器学习理论基础学习5--- PCA
  19. GlobeMapper生成Google瓦片
  20. 使用属性动画 — Property Animation

热门文章

  1. python从入门到放弃之进程锁lock
  2. c# 第9节 数据类型之引用类型
  3. 代码审计-strpos数组绕过
  4. mybatis多对多关联查询
  5. Netty入门程序(四)
  6. Ubuntu放弃战斗, Linux桌面的悲哀 - 简书
  7. oracle--oracle18C软件安装(一)
  8. 【沙龙报名中】集结腾讯技术专家,共探AI技术原理与实践
  9. Redis快速入门及使用
  10. 在 Vue 中使用 装饰器 Decorator