注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢!
调用过程
主要导包
import cn.hutool.core.io.FileUtil;
依赖
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.util.version}</version> </dependency>
private MultipartFile getMultipartFile(List<UnionReconciliation> unionReconciliationList) { String filePath = "logs/union_reconciliation_" + <时间戳> + ".xlsx"; // 临时文件暂存地址:系统项目的 logs 目录下 ExcelUtils.writeExcel(filePath, "sheet1", unionReconciliationList, UnionReconciliation.class); File file = new File(filePath); MultipartFile multipartFile; if (file.exists()) { multipartFile = FileUtils.getMultipartFile(file); if (file.exists()) { FileUtil.del(file.getAbsolutePath()); // 删除临时文件 } } else { throw new CommonException("file does not exist"); } return multipartFile; }
ExcelUtils(若为其他类型的文件则灵活改变即可)
依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.1</version> </dependency>
主要的导包及核心方法
import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
/** * 写出一个 excel 文件到本地 * <br /> * 将类型所有加了 @ExcelProperty 注解的属性全部写出 * * @param fileName 文件路径(相对路径及绝对路径都支持) * @param sheetName sheet名 * @param data 写出的数据 * @param clazz 要写出数据类的Class类型对象 * @param <T> 写出的数据类型 */ public static <T> void writeExcel(String fileName, String sheetName, List<T> data, Class<T> clazz) { writeExcel(null, fileName, sheetName, data, clazz); } /** * 按照指定的属性名进行写出 一个 excel * * @param attrName 指定的属性名 必须与数据类型的属性名一致 * @param fileName 文件名 不要后缀 * @param sheetName sheet名 * @param data 要写出的数据 * @param clazz 要写出数据类的Class类型对象 * @param <T> 要写出的数据类型 */ public static <T> void writeExcel(Set<String> attrName, String fileName, String sheetName, List<T> data, Class<T> clazz) { fileName = StringUtils.isBlank(fileName) ? "file1" : fileName; sheetName = StringUtils.isBlank(sheetName) ? "sheet0" : sheetName; try (FileOutputStream fos = new FileOutputStream(fileName)) { write(fos, attrName, sheetName, data, clazz); LOGGER.info("Excel file generated successfully, the file location is {}", fileName); } catch (Exception exception) { exception.printStackTrace(); } } private static <T> void write(OutputStream os, Set<String> attrName, String sheetName, List<T> data, Class<T> clazz) { ExcelWriterBuilder write = EasyExcel.write(os, clazz); // 如果没有指定要写出那些属性数据,则写出全部 if (!CollectionUtils.isEmpty(attrName)) { write.includeColumnFiledNames(attrName); } write.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet(sheetName).doWrite(data); }
FileUtils
依赖
<!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
主要导包
import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.springframework.http.MediaType; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.apache.poi.util.IOUtils;
核心方法
public static MultipartFile getMultipartFile(File file) { DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file", MediaType.ALL_VALUE, true, file.getName()); try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) { IOUtils.copy(input, os); } catch (Exception e) { throw new IllegalArgumentException("Invalid file: " + e, e); } return new CommonsMultipartFile(fileItem); }