一、首先生成Eexcel
二、transferMultipartFile方法
public static MultipartFile transferMultipartFile(String title, String[] headers, String[] fields, List<Map<String,Object>> dataset) {
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short) 12);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
// 把字体应用到当前的样式
style2.setFont(font2);
// 产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
// 遍历集合数据,产生数据行
Iterator<Map<String,Object>> it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
Map<String,Object> t = (Map<String,Object>) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
for (short i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
String fieldName = fields[i];
try {
Object value = t.get(fieldName);
// 判断值的类型后进行强制类型转换
String textValue = null;
// 其它数据类型都当作字符串简单处理
if(fieldName.indexOf("Lv")>-1){
textValue = value==null? "":value.toString()+"%";
}else{
textValue = value==null? "":value.toString();
}
HSSFRichTextString richString = new HSSFRichTextString(textValue);
cell.setCellValue(richString);
} catch (SecurityException e) {
e.printStackTrace();
} finally {
// 清理资源
}
}
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream()){
workbook.write(os);
return workbookToCommonsMultipartFile(workbook, title);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
三、Workbook 转 MultipartFile(CommonsMultipartFile),这个方法至关重要
/**
* Workbook 转 MultipartFile(CommonsMultipartFile)
*
* @param workbook excel文档
* @param fileName 文件名
* @return
*/
public static MultipartFile workbookToCommonsMultipartFile(Workbook workbook, String fileName) {
//Workbook转FileItem
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("uploadfile", "text/plain", true, fileName);
try {
OutputStream os = fileItem.getOutputStream();
workbook.write(os);
os.close();
//FileItem转MultipartFile
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
return multipartFile;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
四、Feign调用小文件系统,获取文件id
MultipartFile uploadfile = ExcelUtil.transferMultipartFile(fileName, remarkArray, dimenCommentArray, exportList);
String fileId = null;
ResponseResult fileDetail = fileFeignService.openUploadFile(uploadfile, "open_upload_file");
String jsonString = JSONObject.toJSONString(fileDetail.getData());
JSONObject object = JSONObject.parseObject(jsonString);
log.info("文件id{}", object.getString("fileId"));
fileId = object.getString("fileId");