springboot上传多附件如何保存(springbootjxls根据Excel模板)
springboot上传多附件如何保存(springbootjxls根据Excel模板)
项目结构
pom.xml
<!--jxls导出依赖jar包-->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
<scope>compile</scope>
</dependency>
学生信息表模板:
ExcelUtiles
package cn.bdqn.utils;
import net.sf.jxls.transformer.XLSTransformer;
import org.apache.poi.ss.usermodel.workbook;
import org.springframework.util.ResourceUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;
/**
* @ProjectName: Student
* @Author: huat
* @Date: 2020/5/7 8:53
* @Version: 1.0
*/
public class ExcelUtiles {
/**
* 输出表格
* @param map 表格中数据
* @param response 响应
* @param excelName 表格名称
* @param excelPath 表格模板保存的路径
*/
public static void outExcel(Map<String Object> map HttpServletResponse response String excelName String excelPath){
File file=null;
try {
file= ResourceUtils.getFile(excelPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//配置下载路径
String path = "/download/";
createDir(new File(path));
//根据模板生成新的excel
File excelFile = createNewFile(map file path excelName);
//浏览器端下载文件
try {
downloadFile(response excelFile excelName);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//删除服务器生成文件
deleteFile(excelFile);
}
/**
* 根据excel模板生成新的excel
* @param beans 表格中的数据
* @param file 文件
* @param path 生成文件的位置
* @param excelName 文件名称
* @return
*/
private static File createNewFile(Map<String Object> beans File file String path String excelName) {
XLSTransformer transformer = new XLSTransformer();
File newFile = new File(path excelName ".xlsx");
try (InputStream in = new BufferedInputStream(new FileInputStream(file));
OutputStream out = new FileOutputStream(newFile)) {
Workbook workbook = transformer.transformXLS(in beans);
workbook.write(out);
out.flush();
return newFile;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return newFile;
}
/**
* 将服务器新生成的excel从浏览器下载
* @param response 响应
* @param excelFile 表格文件
* @param excelName 表格名称
* @throws UnsupportedEncodingException
*/
private static void downloadFile(HttpServletResponse response File excelFile String excelName) throws UnsupportedEncodingException {
/* 设置文件头:最后一个参数是设置下载文件名 */
response.setHeader("Content-type" "application/vnd.ms-excel");
// 解决导出文件名中文乱码
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition" "attachment;filename=" new String(excelName.getBytes("UTF-8") "ISO-8859-1") ".xlsx");
try (
InputStream ins = new FileInputStream(excelFile);
OutputStream os = response.getOutputStream()
) {
byte[] b = new byte[1024];
int len;
while ((len = ins.read(b)) > 0) {
os.write(b 0 len);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* 浏览器下载完成之后删除服务器生成的文件
* 也可以设置定时任务去删除服务器文件
*
* @param excelFile
*/
private static void deleteFile(File excelFile) {
excelFile.delete();
}
//如果目录不存在创建目录 存在则不创建
private static void createDir(File file) {
if (!file.exists()) {
file.mkdirs();
}
}
}
Controller
@RequestMapping("downExcel")
public void downExecl(HttpServletResponse response){
Map<String Object> map=new HashMap<String Object>();
map.put("name" "学生信息表");
//获取学生信息
map.put("studentList" studentService.getStudent());
//"classpath:static/excel/学生表格.xlsx" 表格模板保存路径,classpath:代表resources路径
ExcelUtiles.outExcel(map response "学生信息表" "classpath:static/excel/学生表格.xlsx");
}
原文:https://my.oschina.net/u/3535099/blog/4268971
作者:冥焱