用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上传的更多相关文章

  1. Spring Boot 文件上传原理

    首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关 ...

  2. spring boot文件上传、下载

    主题:Spring boot 文件上传(多文件上传)[从零开始学Spring Boot]http://www.iteye.com/topic/1143595 Spring MVC实现文件下载http: ...

  3. Spring框架学习笔记(7)——Spring Boot 实现上传和下载

    最近忙着都没时间写博客了,做了个项目,实现了下载功能,没用到上传,写这篇文章也是顺便参考学习了如何实现上传,上传和下载做一篇笔记吧 下载 主要有下面的两种方式: 通过ResponseEntity实现 ...

  4. Spring Boot:上传文件大小超限制如何捕获 MaxUploadSizeExceededException 异常

    Spring Boot 默认上传文件大小限制是 1MB,默认单次请求大小是 10MB,超出大小会跑出 MaxUploadSizeExceededException 异常 spring.servlet. ...

  5. spring boot(十七)上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  6. 使用Spring boot + jQuery上传文件(kotlin)

    文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍. 前端部分 前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对, ...

  7. Spring Boot 文件上传

    其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...

  8. spring boot 文件上传大小限制

    错误信息 : Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes. 解决方法一:在启动类添加如 ...

  9. 从.Net到Java学习第十篇——Spring Boot文件上传和下载

    从.Net到Java学习系列目录 图片上传 Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了. 在模板目录创建一个新的页面 profile/uploadPage. ...

随机推荐

  1. ubuntu个人初始配置记录

    1.安装vim编辑器 sudo apt-get install vim vim-gnome. vim有vim(vim-basic),vim-tiny,vim-gnome(gvim)等多个版本,安装ub ...

  2. Node.js——express

    res.send(),比原生的 res.end() 强大,原生只支持字符串和Buffer对象,而且需要自己加响应报文头,send支持字符串.Buffer.Json对象.数组,而且自动加响应报文头 ap ...

  3. (转)淘淘商城系列——分布式文件系统FastDFS

    http://blog.csdn.net/yerenyuan_pku/article/details/72801777 商品添加的实现,包括商品的类目选择,即商品属于哪个分类?还包括图片上传,对于图片 ...

  4. swift -Dynamic Dispatch

    These instructions perform dynamic lookup of class and generic methods. The class_method and super_m ...

  5. 循环和递归的区别(以前以为递归就是for循环!错的!)

    这里直接上代码!!!! //代码1:(for循环实现的代码) void main() { ; ; i<;i++) { n++; } printf("%d",n); } //代 ...

  6. flutter 实现圆角头像的2种方法

    圆角头像在开发中应用太普遍了,我总结了2种实现方法,分享给大家 方法一: 使用Container组件的decoration可以实现 Container( width: 40, height: 40, ...

  7. 使用GetLogicalDrives获取卷标

    #include<stdio.h> #include<windows.h> int main() { DWORD dwLogical= GetLogicalDrives(); ...

  8. CAD设置超链接(网页版)

    超链接(Hyperlink)可以看做是一个“热点”,它可以从当前Web页定义的位置跳转到其他位置. 设置对象动态提示事件回调函数. //设置对象动态提示事件回调函数 function DoInputP ...

  9. oracle char 多位,引发的问题

    我在表字有一字段type 类型为char(1),一开始用的还好,后来,char(1)不够用了,于是将char(1),变为char(2). 我做了一个字典表,来对应type,可是,总是查不到数据,最后, ...

  10. Hadoop架构模型

    1.hadoop 1.x架构模型:分布式文件存储系统:HDFSNameNode(主节点:管理元数据) secondaryNameNode(作用是合并元数据信息,辅助NameNode管理元数据信息)Da ...