2020-08-09

文献种类:专题技术总结文献;
开发工具与关键技术:MVC与 C#
作者: 阮旭安 ;年级: 1903 ;撰写时间:2020 年 月 8 日

文件(Excel)导入/图片上传

开发工具与关键技术:VS MVC(Microsoft Visual Studio) C# DW SQL
作者:阮旭安
撰写时间:2020年8月8日
                               导入 Excel

一目录:1下载模板 .xls
2.用户根据模板填写数据
3.用户上传数据-导入

----导入部分思路
1.获取上传的文件;
2.把文件转换为二进制数组;(因为所有的文件都是0和1)
3.二进制数组转成内存流;
4.利用NPOI把内存流中的数据读取成Excel
5.使用NPOI读取数据

1.获取上传的文件;
①使用XMLHttpRequest上传文件
②打开指定的URL 文件上传使用POST提交
③先获取模板文件的路径,然后判断模板是否存在,文件存在获取文件名称,并且以流的形式返回文件
如下图:
在这里插入图片描述

2.把文件转换为二进制数组;(因为所有的文件都是0和1)
①判断文件后缀名:(StringComparison.CurrentCultureIgnoreCase):忽略大小写(.xls)
②转换成二进制数组需要声明一个和文件大小一致的二进制数组
如:byte[] fileBytes = new byte[excelFile.ContentLength];
excelFile.ContentLength:指定一个文件内容长度一致的二进制数组来存放;
③将上传的文件转换成二进制数组(把流转换到数组里面)
将 InputStream(流) 用Read(fileBytes, 0, fileBytes.Length) 把数据读到二进制的(fileBytes)数组里面去(把流转换到数组里面)
如下图:
在这里插入图片描述

3.二进制数组转成内存流;
①再将这个二进制数组转为 内存流(MemoryStream)
如: MemoryStream excelMemoryStream = new MemoryStream(fileBytes);
②再将内存流转为工作簿(HSSFWorkbook)
如:NPOI.SS.UserModel.IWorkbookworkbook=newNPOI.HSSF.UserModel.
HSSFWorkbook(excelMemoryStream);

4.利用NPOI把内存流中的数据读取成Excel
①判断是否存在工作表,然后获取出第一个工作表
如:NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
GetSheetAt(0):根据索引去获取
②判断工作表中是否存在行
PhysicalNumberOfRows:代表物理存在的行,不包含空行
③将数据保存到DataTable中
DataTable是C#中的一个表格数据 它的效果和Excel差不多(格式)
④获取Excel
获取的时候会用到的
FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数 !!!!!
FirstRowNum:获取第一个实际行的下标
LastRowNum:获取最后一个实际行的下标
⑤获取列的时候是通过行去获取,获取行的时候通过工作表获取(找各自的依赖对象)
Trim():去空格
5.使用NPOI读取数据
①(sheet.FirstRowNum+2) 为什么是2 (一般)第一行是说明行 第二行是标题行,第三行开 始 参数数据(索引从0开始 )
②去除DataTable空行,先循环完再移除,不要再循环中移除空行,否则非常危险
③bool rowDataIsEmpty = true;//标识是否是空行-默认为空行
Excel插入的图片无法通过NPOI读取,因为图片被编码过,一般导入也不会放图片,图片浮动 在行和列之外

                             图片(文件)上传

1.在数据库(表-S_User)中添加一个 picture 字段 nvarchar():数据类型
如下图:
在这里插入图片描述

2.前台页面:

①绑定 οndblclick="" :双击事件
文件选择控件 隐藏 file:文件类型 accept:筛选文件类型,否则显示所有的文件
accept:筛选文件类型(不是强制),否则显示所有的文件
②FileReader:文件读取器
读取图片文件,用正则表达式过滤文件:
regexImageFilter=/^(?:image/bmp|image/gif|image/jpg|image/jpeg|image/png) / i ; ③ 文 件 读 取 器 o n l o a d 事 件 在 读 文 件 完 成 后 触 发 , 双 击 图 片 触 发 文 件 输 入 框 的 点 击 事 件 , 读 取 照 片 . 再 获 取 文 件 输 入 框 里 面 的 文 件 , 判 断 读 取 的 文 件 是 否 是 需 要 的 文 件 类 型 , 最 后 使 用 文 件 读 取 器 读 取 文 件 , 并 把 文 件 转 为 U R L ( B a s e 64 编 码 ) i m a g e R e a d e r . r e a d A s D a t a U R L ( f i l e ) ; 因 为 图 片 是 通 过 U R L 传 出 来 显 示 ( 这 个 u r l 和 常 规 理 解 不 一 样 ) ④ t y p e : 返 回 文 件 的 类 型 m e t h o d : " p o s t " , 文 件 上 传 时 只 能 使 用 p o s t 提 交 , 不 能 使 用 g e t 提 交 p r o c e s s D a t a : f a l s e , 告 诉 j Q u e r y 不 要 去 处 理 发 送 的 数 据 c o n t e n t T y p e : f a l s e , 告 诉 j Q u e r y 不 要 去 设 置 C o n t e n t − T y p e 请 求 头 ⑤ /i; ③文件读取器onload事件在读文件完成后触发,双击图片触发文件输入框的点击事件,读取照片.再获取文件输入框里面的文件 ,判断读取的文件是否是需要的文件类型,最后使用文件读取器读取文件,并把文件转为URL(Base64编码)imageReader.readAsDataURL(file); 因为图片是通过URL传出来显示(这个url和常规理解不一样) ④type:返回文件的类型 method: "post",文件上传时只能使用post提交,不能使用get提交 processData: false, 告诉jQuery不要去处理发送的数据 contentType: false, 告诉jQuery不要去设置Content-Type请求头 ⑤ /i;onload,,.,,使,URL(Base64)imageReader.readAsDataURL(file);URL(url)type:method:"post",使post使getprocessData:false,jQuerycontentType:false,jQueryContentType("#userPicture").attr(“src”, “”);//清空图片的预览
$("#frmUser [type=‘reset’]").click();//清空表单

2.后台控制器:
①为什么不放一个二进制类型?
因为图片(文件)占的内存比较大,一般不会直接放到数据库里面去,为了避免数据库体积过 度增长,索引速度变慢,所以把文件保存到硬盘上,然后把文件的名称(路径)保存到数据库.
②保存用户头像(图片)
检查存放用户头像的目录是否存在,没有就创建一个(让它自动创建)
③判断是否上传了图片,获取文件的扩展名称,拼接要保存的文件名称,拼接文件保存的路径,保存上传的文件到硬盘.
③上传成功后记得清空表单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值