最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java+EasyExcel實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2023年02月24日 14:33:55   作者:糊涂涂是個(gè)小盆友  
這篇文章主要為大家詳細(xì)介紹了如何通過Java和EasyExcel實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

需求描述

頁(yè)面中當(dāng)用戶將excel表格上傳到服務(wù)器后,將該excel文件保存在本地然后在服務(wù)器中將excel中的數(shù)據(jù)讀取出來然后存入數(shù)據(jù)庫(kù)

實(shí)現(xiàn)

0、依賴

<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>
 <!-- 糊涂工具類-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

1、編寫配置類

文件上傳的路徑:用戶傳來的文件存放在哪

  # 文件上傳
spring:
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 50MB

???????## 文件上傳路徑
savepath: C:\Users\86186\Desktop\pp

2、文件上傳工具類

文件上傳時(shí)需要使用到的一些方法

/**
 * 文件上傳的工具類
 */
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();
    }
}

3、編寫Controller

需要接受前端返回回來的文件

/**
    * 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);
   }

4、編寫Service

@Service("fileUploadService")
@Slf4j
public class FileUploadServiceImpl implements FileUploadService {
	// 注入environment來獲取在配置文件中文件保存的路徑
    @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工具類將excelDTO類轉(zhuǎn)換成product類,因?yàn)閜roduct類對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中的字段
        Product product = BeanUtil.copyProperties(excelDTO, Product.class);
        productMapper.insert(product);
    }

}

5、編寫excel對(duì)應(yīng)的類

@Data
public class ExcelDTO {
   @ExcelProperty("藥品名稱")
   private String pname;
   @ExcelProperty("藥品價(jià)格")
   private BigDecimal pprice;
   @ExcelProperty("藥品數(shù)量")
   private String pcount;
   @ExcelProperty("藥品描述")
   private String pdes;
   @ExcelProperty("藥品類別")
   private Integer ptype;
}

6、創(chuàng)建easyExcel的監(jiān)聽器

ExcelDTO = excel對(duì)應(yīng)的類

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) {

    }
}

7、最終效果

以上就是Java+EasyExcel實(shí)現(xiàn)文件上傳功能的詳細(xì)內(nèi)容,更多關(guān)于Java EasyExcel文件上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring中的事務(wù)隔離級(jí)別和傳播行為

    Spring中的事務(wù)隔離級(jí)別和傳播行為

    這篇文章主要介紹了Spring中的事務(wù)隔離級(jí)別和傳播行為,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • struts2中常用constant命令配置方法

    struts2中常用constant命令配置方法

    這篇文章主要介紹了struts2中常用constant命令配置方法,需要的朋友可以參考下
    2016-09-09
  • 如何在Spring Boot中建立連接及測(cè)試

    如何在Spring Boot中建立連接及測(cè)試

    對(duì)于剛接觸MQTT的開發(fā)者來說,了解如何在Spring Boot項(xiàng)目中集成MQTT客戶端并建立連接是邁向?qū)嶋H應(yīng)用的重要一步,今天,我將分享一個(gè)詳細(xì)的入門指南,帶你一步步在Spring Boot中建立MQTT連接,并通過JUnit進(jìn)行簡(jiǎn)單的單元測(cè)試,感興趣的朋友一起看看吧
    2024-12-12
  • java讀取http請(qǐng)求中的body實(shí)例代碼

    java讀取http請(qǐng)求中的body實(shí)例代碼

    下面小編就為大家?guī)硪黄猨ava讀取http請(qǐng)求中的body實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    這篇文章主要介紹了IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java中通過網(wǎng)卡名稱獲取IP地址

    java中通過網(wǎng)卡名稱獲取IP地址

    java中通過網(wǎng)卡名稱獲取IP地址,需要的朋友可以參考一下
    2013-04-04
  • Java在枚舉類型中增加自定義方法詳解

    Java在枚舉類型中增加自定義方法詳解

    這篇文章主要介紹了Java在枚舉類型中增加自定義方法詳解,對(duì)于枚舉類型來說,除了無法繼承它以外,基本可以將它看作一個(gè)普通的類,這意味著你可以在里面增加自定義的方法,甚至可以增加一個(gè) main() 方法,需要的朋友可以參考下
    2023-11-11
  • 淺談Spring如何解決循環(huán)依賴的問題

    淺談Spring如何解決循環(huán)依賴的問題

    這篇文章主要介紹了淺談Spring如何解決循環(huán)依賴的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 通過Spring AOP實(shí)現(xiàn)異常捕捉機(jī)制

    通過Spring AOP實(shí)現(xiàn)異常捕捉機(jī)制

    在開發(fā)過程中,異常處理是一個(gè)不可忽視的重要環(huán)節(jié),合理、優(yōu)雅地處理異常不僅能提高代碼的魯棒性,還能提升系統(tǒng)的用戶體驗(yàn),本文將介紹如何通過Spring AOP實(shí)現(xiàn)一個(gè)高效的異常捕捉機(jī)制,使得異常處理變得更加優(yōu)雅和統(tǒng)一,需要的朋友可以參考下
    2024-08-08
  • RabbitMq報(bào)錯(cuò)reply-code=406 reply-text=PRECONDITION_FAILED解決

    RabbitMq報(bào)錯(cuò)reply-code=406 reply-text=PRECONDITION_FAILED

    這篇文章主要為大家介紹了RabbitMq報(bào)錯(cuò)reply-code=406 reply-text=PRECONDITION_FAILED分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

金门县| 比如县| 东辽县| 军事| 惠东县| 朝阳市| 肥西县| 莫力| 浦江县| 宁波市| 桂东县| 广宁县| 海宁市| 利津县| 华容县| 遂溪县| 改则县| 桐梓县| 苍山县| 闽清县| 开化县| 云阳县| 安徽省| 锡林郭勒盟| 墨竹工卡县| 莱芜市| 瓮安县| 新竹县| 曲靖市| 英超| 昌图县| 铜山县| 玛纳斯县| 六枝特区| 邓州市| 高邮市| 榆中县| 报价| 拉孜县| 东光县| 黄骅市|