.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 文件 & ...
随机推荐
- Maven 中 dependencyManagement 元素,知识点
Maven 提供的 dependencyManagement 元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性.在 dependencyManagement 元素下的依赖声明不会 ...
- SpingBoot四——前后端分离
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:https://www.cnblogs.com/by-dream/p/11336057.html 根据之前的教程,我们已经可以独立 ...
- 海量数据MySQL项目实战
主要内容包含 MySQL 典型数据库架构介绍.MySQL 主流数据库架构对比等理论性知识,然后从“订单.用户”两个项目实战,抛砖引玉,介绍亿级互联网业务数据库项目如何设计. MySQL 典型数据库架构 ...
- http的get请求与post请求区别
原文 http://www.w3school.com.cn/tags/html_ref_httpmethods.asp GET 方法 请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发 ...
- springboot学习过程中遇到的问题(遇到再总结)
1.pom文件第一行报错 当引入的spring-boot-starter-parent版本高于2.1.1会导致pom.xml文件第一行报错 (以后找个时间彻底解决此问题) 2.servlet配置失 ...
- 6.Vue的Axios异步通信
1.什么是Axios Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,主要作用就是实现 AJAX 异步通信,其功能特点如下: 从浏览器中创建 XMLHttpRequests ...
- 在树莓派上配置MariaDB
在树莓派上配置MariaDB 前言 MariaDB是由原本开发MySQL的一些原始开发者领导,他们担心Oracle收购MySQL后会有一些隐患.MariaDB与MySQL保持这高度兼容性,并使用了一个 ...
- TCP三次握手及四次断开,TCP有限状态机
TCP 的连接建立 上图画出了 TCP 建立连接的过程.假定主机 A 是 TCP 客户端,B是服务端.最初两端的 TCP 进程都处于 CLOSED 状态.图中在主机下面的是 TCP进程所处的状态.A ...
- 开源推荐 - CoDo开源一站式DevOps平台
一群有梦想的年轻人开源了一个云管理平台,他们的口号是:让天下没有996的运维 有幸参与到CoDo项目的开发,这是一个非常棒的一站式开源运维平台,分享给大家 平台介绍 CODO是一款为用户提供企业多混合 ...
- [LeetCode] 148. Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...