您好,登錄后才能下訂單哦!
這篇“怎么使用Java+EasyExcel實(shí)現(xiàn)文件上傳功能”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“怎么使用Java+EasyExcel實(shí)現(xiàn)文件上傳功能”文章吧。
頁(yè)面中當(dāng)用戶(hù)將excel表格上傳到服務(wù)器后,將該excel文件保存在本地然后在服務(wù)器中將excel中的數(shù)據(jù)讀取出來(lái)然后存入數(shù)據(jù)庫(kù)
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency> <!-- 糊涂工具類(lèi)--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.11</version> </dependency>
文件上傳的路徑:用戶(hù)傳來(lái)的文件存放在哪
# 文件上傳 spring: servlet: multipart: max-file-size: 5MB max-request-size: 50MB ## 文件上傳路徑 savepath: C:\Users\86186\Desktop\pp
文件上傳時(shí)需要使用到的一些方法
/** * 文件上傳的工具類(lèi) */ public class FileUploadUtil { /** * 得到filename文件名的后綴名 * @param filename 文件名 * aasdsad.jpg asaa.gif * @return */ public static String getFileSuffix(String filename){ if(filename == null || filename.isEmpty()){ throw new RuntimeException("文件名不能為空,filename:"+filename); } return filename.substring(filename.lastIndexOf(".")); } /** * 使用UUID生成一個(gè)唯一的字符串 * @return */ public static String randomFilename(){ return UUID.randomUUID().toString().replaceAll("-",""); } /** * 基于時(shí)間戳生成文件名 * @return */ public static String randomFilename2(){ return System.currentTimeMillis()+""; } /** * 基于時(shí)間戳 + UUID生成文件名 * @return */ public static String randomFilename3(){ return System.currentTimeMillis()+randomFilename(); } /** * 創(chuàng)建目錄 */ public static void mkdir(String path){ File file = new File(path); if(!file.exists()){ //不存在 file.mkdirs(); } } /** * 基于當(dāng)前時(shí)間創(chuàng)建文件名 */ public static String getTimeFilename(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd-HH-mm-ss"); Date date = new Date(System.currentTimeMillis()); return simpleDateFormat.format(date)+"-"+randomFilename2(); } }
需要接受前端返回回來(lái)的文件
/** * excel文件導(dǎo)入進(jìn)數(shù)據(jù)庫(kù)中 * @param file * @return */ @Autowired private FileUploadService fileUploadService; @PostMapping("excelImport") public ResponseData excelImport(MultipartFile file) throws Exception { // 由于easyExcel所以需要傳入fileUploadService對(duì)象 String upload = fileUploadService.upload(file,fileUploadService); return ResponseDataUtil.buildOk(upload); }
@Service("fileUploadService") @Slf4j public class FileUploadServiceImpl implements FileUploadService { // 注入environment來(lái)獲取在配置文件中文件保存的路徑 @Autowired private Environment environment; // 注入數(shù)據(jù)層的對(duì)象 @Autowired private productMapper productMapper; @Override public String upload(MultipartFile file, FileUploadService fileUploadService) throws Exception { if (file == null) { throw new Exception("文件不可以為空"); } //得到上傳的保存路徑 String savePath = environment.getProperty("savepath"); //創(chuàng)建目錄 FileUploadUtil.mkdir(savePath); String dbPath = ""; //得到上傳的原文件名 String originalFilename = file.getOriginalFilename(); String suffix = FileUploadUtil.getFileSuffix(originalFilename); String filename = FileUploadUtil.getTimeFilename() + suffix; dbPath += filename; //保存 file.transferTo(new File(savePath, filename)); dbPath = savePath +"\\"+ dbPath; //調(diào)用方法進(jìn)行讀取 EasyExcel.read(dbPath, ExcelDTO.class, new PageReadListener<ExcelDTO>(dataList -> { for (ExcelDTO demoData : dataList) { log.info("讀取到一條數(shù)據(jù){}", JSON.toJSONString(demoData)); insert(demoData); } })).sheet().doRead(); return dbPath; } // 插入數(shù)據(jù)到數(shù)據(jù)庫(kù)中 @Override public void insert(ExcelDTO excelDTO) { // 使用hutool工具類(lèi)將excelDTO類(lèi)轉(zhuǎn)換成product類(lèi),因?yàn)閜roduct類(lèi)對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中的字段 Product product = BeanUtil.copyProperties(excelDTO, Product.class); productMapper.insert(product); } }
@Data public class ExcelDTO { @ExcelProperty("藥品名稱(chēng)") private String pname; @ExcelProperty("藥品價(jià)格") private BigDecimal pprice; @ExcelProperty("藥品數(shù)量") private String pcount; @ExcelProperty("藥品描述") private String pdes; @ExcelProperty("藥品類(lèi)別") private Integer ptype; }
ExcelDTO = excel對(duì)應(yīng)的類(lèi)
fileUploadService = service對(duì)象
@Slf4j @Component public class DataListener extends AnalysisEventListener<ExcelDTO> { public FileUploadService fileUploadService; public DataListener(FileUploadService fileUploadService) { this.fileUploadService = fileUploadService; } public DataListener() { } //讀取excel內(nèi)容,一行一行讀取 @Override public void invoke(ExcelDTO excelDTO, AnalysisContext analysisContext) { if (excelDTO == null) { try { throw new Exception("文件數(shù)據(jù)為空"); } catch (Exception e) { e.printStackTrace(); } } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
以上就是關(guān)于“怎么使用Java+EasyExcel實(shí)現(xiàn)文件上傳功能”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。