苏州网站建设丶好先生科技,网站二级联菜单怎么做,电影网站可以备案吗,wordpress 酒店主题SpringBootVue实现简单的文件上传
1 环境 SpringBoot 3.2.1#xff0c;Vue 2#xff0c;ElementUI 2 问题 前两篇文章#xff0c;我们上传了txt、Excel文件#xff0c;其实文件类型有很多种#xff0c;如果我们的upload组件没有上传文件类型的限制#xff0c;那么同一个…SpringBootVue实现简单的文件上传
1 环境 SpringBoot 3.2.1Vue 2ElementUI 2 问题 前两篇文章我们上传了txt、Excel文件其实文件类型有很多种如果我们的upload组件没有上传文件类型的限制那么同一个接口会上传多种文件而类型不一样其处理的方式也不一样。一种方式是写if判断我们判断其类型然后做特定的处理那样代码会有大量if判断另外一个可以使用策略模式来处理简单来说就是定义一个接口多个实现类不同的文件类型使用不同的实现类。这里对策略模式不做详细的介绍有兴趣的可以自行上网查阅。直接上代码。 接口
public interface FileService {Result upload(MultipartFile file);
}关于txt文件的处理类
Service(txt)
public class TextServiceImpl implements FileService {Overridepublic Result upload(RequestParam(file) MultipartFile file) {if (file.isEmpty()) {return Result.builder().code(500).msg(上传失败).build();}try (BufferedReader reader new BufferedReader(new InputStreamReader(file.getInputStream()))) {String line;while ((line reader.readLine()) ! null) {// 在这里处理读取到的每一行内容System.out.println(line);}} catch (IOException e) {e.printStackTrace();}return Result.builder().code(200).msg(上传成功).build();}
}关于xls文件的处理
Service(xls)
public class XLSServiceImpl implements FileService {Overridepublic Result upload(MultipartFile file) {if (file.isEmpty()) {return Result.builder().code(500).msg(上传失败).build();}try (Workbook workbook new HSSFWorkbook(file.getInputStream())) {//获取第一个sheet页Sheet sheet workbook.getSheetAt(0);//遍历每行for (Row row : sheet) {//遍历每个单元格for (Cell cell : row) {System.out.print(cell.getStringCellValue() );}System.out.println();}} catch (IOException e) {e.printStackTrace();}return Result.builder().code(200).msg(上传成功).build();}
}关于xlsx文件的处理
Service(xlsx)
public class XLSXServiceImpl implements FileService {Overridepublic Result upload(MultipartFile file) {if (file.isEmpty()) {return Result.builder().code(500).msg(上传失败).build();}try (Workbook workbook new XSSFWorkbook(file.getInputStream())) {//获取第一个sheet页Sheet sheet workbook.getSheetAt(0);//遍历每行for (Row row : sheet) {//遍历每个单元格for (Cell cell : row) {System.out.print(cell.getStringCellValue() );}System.out.println();}} catch (IOException e) {e.printStackTrace();}return Result.builder().code(200).msg(上传成功).build();}
}入口
RestController
public class FileController {//处理实现类的集合spring中对于同一类bean不同的别名是可以注入到一个map中或者list中的//key为实现类的别名value就是beanAutowiredprivate MapString, FileService fileServiceMap;RequestMapping(/fileUpload)private Result fileUpload(RequestParam(file) MultipartFile file) throws IOException {if (file.isEmpty()) {return Result.builder().code(500).msg(上传失败).build();}String fileName file.getOriginalFilename();//这里我们获取到后缀名然后就可以在map中找到对应的实现类FileService fileService fileServiceMap.get(getSuffix(fileName));if(fileService null){return Result.builder().code(500).msg(没有合适的处理器处理上传的文件).build();}fileService.upload(file);return Result.builder().code(200).msg(上传成功).build();}//获取文件的后缀名private static String getSuffix(String filePath) {int dotIndex filePath.lastIndexOf(.);if (dotIndex 0 dotIndex filePath.length() - 1) {return filePath.substring(dotIndex 1);}return ;}
}附 1 Service(“txt”)就是给实现类bean取个别名然后方便我们后续通过文件的后缀名找到对应的实现类。 2 HSSF 和 XSSF 主要有以下区别
HSSF 是用于操作 Excel 2003 及以前版本.xls 文件的类库。它基于二进制格式。
XSSF 则是用于操作 Excel 2007 及以后版本.xlsx 文件的类库这些版本采用的是 Open XML 格式。XSSF 能够处理更大、更复杂的工作簿并且在处理一些新特性和功能上更具优势。