1.页面代码:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/fileinput.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/fileinput.min.js"></script>
<script src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/zh.js"></script>
<script>
$(function () {
$("#input_1").fileinput({
language: 'zh',
previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
showUpload: true, //是否显示上传按钮
showCaption: false,//是否显示标题
browseClass: "btn btn-primary", //按钮样式
enctype: 'multipart/form-data',
validateInitialCount: true,
showUploadedThumbs: true
});
});
</script>
</head>
<body>
<div>
@using (Html.BeginForm("Index1", "Test", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" id="input_1" name="excle" class="file-loading" data-preview-file-type="text">
<img src="@ViewBag.imagepath">
}
</div>
</body>
</html>

在这里主要遇到过两个问题,

第一个问题就是js的顺序问题,导致fileinput()初始化不成功。

第二个问题是@using (Html.BeginForm("Index1", "Test", FormMethod.Post, new { enctype = "multipart/form-data" }))

在这句代码中没有加入new { enctype = "multipart/form-data" }导致后台HttpPostFileBase 为null;

2.后台

思路:

1.首先通过HttpPostFileBase file=Request.Files["excle"];//excle为input 的name;

2.通过File.SaveAS(path)把excle保存到本地文件夹中。

3.如果是文字:

通过封装好的ExcelHelp类的ExcelToDataTable方法,把Excel 转换为datatable;

如果是图片;

图片的话需要借助PictureInfo 类和NpoiExtend 类这两个类读取到List<PictureInfo> list 中。

然后把通过System.Drawing.Image.Save()方法保存list.PictureData到相应的目录中!

然后就ok啦。

下面是后台图片的处理代码:

file.SaveAs(savepath);
DataTable dt = new DataTable();
FileStream fs = new FileStream(savepath, FileMode.Open, FileAccess.Read);
IWorkbook book = new XSSFWorkbook(fs);
ISheet sheet = book.GetSheet(book.GetSheetName(0));
List<PicturesInfo> list = new List<PicturesInfo>();
list = NpoiExtend.GetAllPictureInfos(sheet);
string dir = "/File/pictures/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
string newfileName = Guid.NewGuid().ToString();
int j = 0;

list.ToList().ForEach(p =>
{
int i = 0;
string imagename = (i++).ToString();
string fulldir = dir + j.ToString() + "/" + imagename + ".jpg";
Directory.CreateDirectory(Path.GetDirectoryName(Request.MapPath(fulldir)));
Stream stream = new MemoryStream(p.PictureData);

Image image = Image.FromStream(stream);
ImageHelp imagehelp = new ImageHelp();
Bitmap myBitmap = new Bitmap(image);
ImageCodecInfo myImageCodecInfo = imagehelp.GetEncoderInfo("image/jpeg");
Encoder myEncoder = Encoder.Quality;
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 75L);
EncoderParameters myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = myEncoderParameter;
image.Save(Request.MapPath(fulldir), myImageCodecInfo, myEncoderParameters);
j++;

在这里还用到了保证图片质量的PictureHelp类。

我一开始想用FileStream 类,直接保存byte[]类型的p.Picturedata字节流,但是经过无脑的百度和研究FileStream类,证明这不是可能的

因为FileStream 类只能读取具体的文件,要么这种文件是除图片外的,因为其他可以使用FileMode.OpenOrCreate方法创建没有数据的文件,而图片总不可能创建没有字节流的图片的。

所以经过一番瞎找,发现了一种已解决方法。因为Image.FromStream可以读取流。所以我就先把p.Picturedata转换成Stream,Stream stream = new MemoryStream(p.PictureData);然后通过Image.FromStream()这个方法转换成了Image类,接下来就可以通过Image.save(path);path注意一定要是服务器的虚拟地址;

但是这样保存下来的图片质量不忍直视,然后,我就经过高质量图片保存类PictureHelp,换了下图片质量。最终图片就成功保存了。

然后我就开始在网页上测试图片的质量了,下面是我的测试图:

结果证明图片的质量有那么一点提高,但是不多。。。

导入Excel 文件(图片和文字)NPOI+BootStrap fileinput 插件 的结合使用的更多相关文章

  1. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  2. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  3. Java POI导入Excel文件

    今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...

  4. phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。

    工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...

  5. YII使用PHPExcel导入Excel文件的方法

    1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...

  6. springMVC(5)---导入excel文件数据到数据库

    springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...

  7. excel数据 入库mysql 和 mysql数据 导入excel文件

    1.excel数据入库mysql 首先准备excel文件, 标红的地方需要留意,一个是字段名所在行,一个表名对应页: 然后私用mysql工具 navicat, 选择数据库,然后导入文件, 选中相应ex ...

  8. java后端导入excel模板和导入excel文件去读数据

    模板转载地址:https://www.cnblogs.com/zhangyangtao/p/9802948.html 直接上代码(我是基于ssm写的demo,导入文件目前只能读取.xls后缀的exce ...

  9. C# Aspose.Cells方式导入Excel文件

    读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...

随机推荐

  1. 从零起步学python计划及感想

    从纯传统bi转型过来的技术顾问,比较有优势的是对业务的熟悉,对数据有敏感度,熟悉数据模型.但是长年累月基本都是用sql处理问题.目前还没有经历过sql解决不了的问题,一个sql解决不了就用临时表,几个 ...

  2. 关于docker使用的几个小问题(一)

    由于刚接触docker踩了几个坑,希望本文对网瘾少年有所帮助. Docker分CE版(社区版)和EE版(商用版),具体安装流程参考文档介绍,在此不再赘述.下面分Windows和Linux分别踩坑: 一 ...

  3. 一、JAVA环境变量配置详解——JavaWeb点滴

    JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH. JAVA_HOME 指向 ...

  4. mybatis 分页问题 (个人认为算是个bug)

    问题描述:相同的查寻条件, 分页显示的结果和.net版本的分页结果数量一样,排序不一样, 不同的页有相同的数据.比如:第2面和第3页都有同一条相同的数据. 核心代码: //自己实现 int total ...

  5. Spring+MyBatis+SpringMvc整合Demo

    客户关系管理系统demo 项目分析 该demo使用技术及环境:ssm+maven+bootstrap+jsp+mysql+idea+jdk1.8 需求:客户管理,实现客户列表分页显示如下图 项目开始 ...

  6. 安装MongoDB启动时报错‘发生系统错误2’的解决办法

    安装数据库mongodb启动时报"发生系统错误2". 这个问题是如果你之前已经装过一次,并且两次安装目录不同,就绝对会碰到的,因为你之前安装的路径已经在注册表中生成了,并没有随着你 ...

  7. The Speed 歌词

    [ti:]The Speed [ar:]<QQ飞车> [al:]幻想 [by:]伴奏:My Soul   [00:03.60]The Speed [00:07.06]<QQ飞车> ...

  8. 532. K-diff Pairs in an Array

    Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...

  9. 《Linux命令行与shell脚本编程大全》 第七章理解Linux文件权限

    Linux沿用了Unix文件权限的方法,允许用户和组根据每个文件和目录的安全性设置来访问文件. 用户权限通过创建用户时分配的用户ID(UID)来跟踪的.每个用户有唯一的ID,但是登录时用的不是UID, ...

  10. for循环中执行setTimeout问题

    代码片段: for(var i=0;i<8;i++){ setTimeout(function () { console.log(i) },0) } 输出了8次8,这跟js的执行顺序和作用域链有 ...