前端

<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

.net core ajax使用EPPlus上传excle导入总结的更多相关文章

  1. ASP.NET Core MVC上传、导入、导出知多少

    前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天才研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 ...

  2. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  3. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  4. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  6. HTML5+AJAX原生分块上传文件的关键参数设置

    processData:false 这是jquery.ajax的一个参数.默认值为true,表示会将非字符串对象自动变成k1=v1&k2=v2的形式,例如一个数组参数{d:[1,2]},到服务 ...

  7. 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...

  8. JS案例之4——Ajax多图上传

    近期项目中有好几次用到多图上传,第一次在项目中真正用到Ajax技术,稍微整理了下,贴个案例出来. 我们传统的做法是当用户提交一个表单时,就向web服务器端发送一个请求.服务器接受并处理传来的表单信息, ...

  9. MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!

    MVC 5.0(or5.0↓)  Ajax.BeginForm 异步上传附件问题,答案是不能的! (请注意我这里说的异步!) 来看一下下面这段一步提交file的代码 //前台 .cshtml 文件 & ...

随机推荐

  1. 转:oracle 体系结构

    前几天面试的时候面试官才问过我ORACLE的体系结构,让我在一张白纸上画出来.回头想想当时答得还不错,大部分内容都描述出来了,呵呵,刚才在网上看到一篇讲解ORACLE体系结构的文章,觉得不错,转过来存 ...

  2. Docker--部署mongodb+.netcore+nginx

    前言 公司租用的阿里云的服务器,每年会更换一次,很麻烦,还容易出问题,想会不会有更方便的方式来迁移服务器,就这样接触到了docker. 参考网上的一些资料,自己琢磨了一段时间,记录下docker的部署 ...

  3. 3. gn入门

    Chromium是用gn和ninja进行编译的,即gn把.gn文件转换成.ninja文件,然后ninja根据.ninja文件将源码生成目标程序.gn和ninja的关系就与cmake和make的关系差不 ...

  4. [原创]Appium与Appium desktop的区别

    1.两者都属于Appium 服务端 2.二者最新版本如下:地址:https://github.com/appium/appium-desktop/releases Appium 服务端支持的:地址:h ...

  5. Centos7 安装mysql-8.0.18(rpm)

    1.前言 当前MySQL最新版本:8.0.18 (听说比5.7快2倍)官方之前表示:MySQL 8.0 正式版 8.0.18 已发布,MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量 ...

  6. 16-numpy笔记-莫烦pandas-4

    代码 import pandas as pd import numpy as np dates = pd.date_range('20130101', periods=6) df=pd.DataFra ...

  7. Graph Embedding:

    https://blog.csdn.net/hy_jz/article/details/78877483 基于meta-path的异质网络Embedding-metapath2vec metapath ...

  8. Spring Boot中以代码方式配置Tomcat

    在Spring Boot2.0以上配置嵌入式Servlet容器时EmbeddedServletContainerCustomizer类不存在,经网络查询发现被WebServerFactoryCusto ...

  9. springboot对JPA的支持

    springboot之jpa支持 导入相关pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  10. mod35云掩膜产品用法

    在网上一直没找到一个明确说怎么用MOD35产品的,都是说去看用户手册,第一次看了过一段时间我又忘记怎么搞了,赶紧记下来. 而且现在才发现第一次自己搞的都弄错了. 简单的判断是否是云,只要读取mod35 ...