spring boot file上传
用Spring Boot写读取Excel文件小工具的时候遇到的一些小坑已经填平,复制即可满足普通的文件上传功能
POI方面只需一个包,其他通用包工程中一般都会带
TIPS:前端为了扩展我用ajax异步请求,表单提交也支持,form表单enctype="multipart/form-data"始终需要
注:不要导入多余的 MultipartFile 相关配置,spring boot已自带文件上传功能
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
package sz.tools.controller; import com.alibaba.fastjson.JSON;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest;
import java.io.*;import java.util.Iterator;/**
* 组合商品产品小工具
*
* @author LiuZhibo
* @date 2018年7月21日15:17:13
*/
@RestController
public class CombinationController { @RequestMapping("/combination")
public String combination(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException { Assert.isTrue(file != null, "file is null");
Assert.isTrue(file.getSize() > 0, "file is null"); File f = null;
InputStream ins = file.getInputStream();
f = new File(file.getOriginalFilename());
inputStreamToFile(ins, f); Assert.isTrue(f != null, "file is null");
Assert.isTrue(f.length() > 0, "file is null"); FileInputStream fileInputStream = new FileInputStream(f); Workbook workbook = getWorkbook(f.getName(), fileInputStream); fileInputStream.close();
Sheet sheet = workbook.getSheetAt(0); // 获取到第一个sheet
Iterator<Row> iterator = sheet.rowIterator();
if (iterator.hasNext()) {
iterator.next(); // 跳过第一列
} while (iterator.hasNext()) {
try {
Row row = iterator.next();
Cell baseCell = row.getCell(1);
} catch (Exception e) {
e.printStackTrace();
break;
}
}
return null;
} private static Workbook getWorkbook(String fileName, FileInputStream fileInputStream) throws IOException {
Workbook workbook;
String extString = fileName.substring(fileName.lastIndexOf("."));
if (".xls".equals(extString)) {
workbook = new HSSFWorkbook(fileInputStream);
} else if (".xlsx".equals(extString)) {
workbook = new XSSFWorkbook(fileInputStream);
} else {
workbook = null;
}
return workbook;
} public static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
--------------------------------------以下为HTML部分--------------------------------------------------------------
<html>
<head>
<title>Title</title>
</head>
<body>
<form id="fileForm" action="combination" enctype="multipart/form-data">
<input type="file" name="file" value="上传Excel"/>
<a href="javascript:;" id="submit">提交</a>
</form>
<div id="showContent"></div>
</body>
<script type="text/javascript" src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script type="text/javascript">
$("#submit").click(function () {
var formData = new FormData(document.getElementById("fileForm"));//表单id
$.ajax({
type:"post",
data:formData,
url: "combination",
processData:false,
contentType:false,
success:function(data){
$("#showContent").html("");
var json = JSON.parse(data);
$.each(json, function(idx, obj) {
$("#showContent").append(obj + "<br/>")
});
alert("请求成功!");
},
error:function(e){
alert("错误!!");
console.log(data);
}
});
});
</script>
</html>
spring boot file上传的更多相关文章
- Spring Boot 文件上传原理
首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关 ...
- spring boot文件上传、下载
主题:Spring boot 文件上传(多文件上传)[从零开始学Spring Boot]http://www.iteye.com/topic/1143595 Spring MVC实现文件下载http: ...
- Spring框架学习笔记(7)——Spring Boot 实现上传和下载
最近忙着都没时间写博客了,做了个项目,实现了下载功能,没用到上传,写这篇文章也是顺便参考学习了如何实现上传,上传和下载做一篇笔记吧 下载 主要有下面的两种方式: 通过ResponseEntity实现 ...
- Spring Boot:上传文件大小超限制如何捕获 MaxUploadSizeExceededException 异常
Spring Boot 默认上传文件大小限制是 1MB,默认单次请求大小是 10MB,超出大小会跑出 MaxUploadSizeExceededException 异常 spring.servlet. ...
- spring boot(十七)上传文件
上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...
- 使用Spring boot + jQuery上传文件(kotlin)
文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍. 前端部分 前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对, ...
- Spring Boot 文件上传
其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...
- spring boot 文件上传大小限制
错误信息 : Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes. 解决方法一:在启动类添加如 ...
- 从.Net到Java学习第十篇——Spring Boot文件上传和下载
从.Net到Java学习系列目录 图片上传 Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了. 在模板目录创建一个新的页面 profile/uploadPage. ...
随机推荐
- [BZOJ1083][SCOI2005]繁忙的都市 最小生成树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 由kruskal算法原理可知,我们对一张无向图做普通的最小生成树,连上的最后一条边就 ...
- [BZOJ2002][Hnoi2010]Bounce弹飞绵羊 LCT
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 建图,每次往后面跳就往目标位置连边,将跳出界的点设为同一个点.对于修改操作发现可以用 ...
- vue组件中—bus总线事件回调函数多次执行的问题
在利用vue组件进行事件监听时发现,如果对N个vue组件实例的bus总线绑定同一事件的回调函数,触发任意组件的对应事件,回调函数至少会被执行N次,这是为什么呢? 为此,调研了普通对象的事件绑定和触发实 ...
- 如何向妻子解释OOD (转)
此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不 ...
- 拼图游戏源码-swift版项目源码
作者fanyinan,源码PuzzleProject,公司的项目中需要一个拼图游戏,之前有手动拼图和随机打乱的功能,近期又由于个(xian)人(zhe)爱(dan)好(teng)自己加入了自动拼图功能 ...
- Codeforces_B.Maximum Sum of Digits
http://codeforces.com/contest/1060/problem/B 题意:将n拆为a和b,让a+b=n且S(a)+S(b)最大,求最大的S(a)+S(b). 思路:考虑任意一个数 ...
- zTree 点击文字 勾选check
callback: { onClick:function(event, treeId, treeNode){ console.info("onClick") var treeObj ...
- Mac OS X 中安装 brew
不想被误导?直接看官方文档: http://mxcl.github.com/homebrew/ 先安装Git,打开一个shell cd /usr/local sudo mkdir homeb ...
- 面试之Redis
面:缓存中间件--Memcached和Redis的区别是什么? 答:Memcached的优点是简单易用,代码层次类似与Hash.支持简单数据类型,但不支持数据持久化存储,也不支持主从同步,也不支持分片 ...
- 第3节 mapreduce高级:12、mapreduce相关的参数调整
5.1 多job串联 一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现 示例代码: ControlledJob ...