.net core ajax使用EPPlus上传excle导入总结
前端
<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导入总结的更多相关文章
- ASP.NET Core MVC上传、导入、导出知多少
前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天才研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 ...
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库
SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库 /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- python django + js 使用ajax进行文件上传并获取上传进度案例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- HTML5+AJAX原生分块上传文件的关键参数设置
processData:false 这是jquery.ajax的一个参数.默认值为true,表示会将非字符串对象自动变成k1=v1&k2=v2的形式,例如一个数组参数{d:[1,2]},到服务 ...
- 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传
现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...
- JS案例之4——Ajax多图上传
近期项目中有好几次用到多图上传,第一次在项目中真正用到Ajax技术,稍微整理了下,贴个案例出来. 我们传统的做法是当用户提交一个表单时,就向web服务器端发送一个请求.服务器接受并处理传来的表单信息, ...
- MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!
MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的! (请注意我这里说的异步!) 来看一下下面这段一步提交file的代码 //前台 .cshtml 文件 & ...
随机推荐
- 2.InfluxDB-InfluxQL基础语法教程--目录
本文翻译自官网,官方文档地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) InfluxQL ...
- LoadRunner性能测试工具下载
LoadRunner性能测试工具 LoadRunner是前美科利(Mercury Interactive)公司著名的性能测试产品.Mercury公司曾经是全球业务优化科技领域的领导者.2006年由惠普 ...
- seq命令的使用
标题:seq命令的使用 作用:seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行控制 语法: [1] seq [选项] ...
- 逆向工程文件example完美结合使用PageHelper分页插件及分页不成功原因
原生的mybatis需要手写sql语句,项目数据库表多了之后,可以让你写sql语句写到手软,于是mybatis官方提供了mybatis-generator:mybatis逆向工程代码生成工具,用于简化 ...
- pugixml 读取
xml <?xml version="1.0" encoding="utf-8" ?> <ROOT> <COMPANY>Te ...
- MyBatis 插入记录同时获取主键
MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...
- linux的cpu使用率
linux 上一个核占满是 100%,双核机器占满整个 CPU 是 200%
- n8n 基于node 的流程自动化工具
n8n 是基于node开发的流程自动化工具,提供了可视化的操作,我们可以用来集成不同的服务. 目前已经提供了很多的服务集成组件,同时我们也可以方便的自己扩展,后边会进行一个系统的 学习,同时介绍下使用 ...
- mysql使用记录
1. 报错 10061 将mysql启动即可
- HTTP协议,到底是什么鬼?
作者 | Jeskson 来源 | 达达前端小酒馆 了解HTTP HTTP是什么呢?它是超文本传输协议,HTTP是缩写,它的全英文名是HyperText Transfer Protocol. 那么什么 ...