国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot3文件管理

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot3文件管理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄
  • 一、簡(jiǎn)介
  • 二、工程搭建
    • 1、工程結(jié)構(gòu)
    • 2、依賴管理
  • 三、上傳下載
    • 1、配置管理
    • 2、上傳下載
  • 四、Excel文件
    • 1、Excel創(chuàng)建
    • 2、Excel讀取
    • 3、解析監(jiān)聽
    • 4、導(dǎo)入導(dǎo)出
  • 五、參考源碼

標(biāo)簽:上傳.下載.Excel.導(dǎo)入.導(dǎo)出;

一、簡(jiǎn)介

在項(xiàng)目中,文件管理是常見的復(fù)雜功能;

首先文件的類型比較多樣,處理起來比較復(fù)雜,其次文件涉及大量的IO操作,容易引發(fā)內(nèi)存溢出;

不同的文件類型有不同的應(yīng)用場(chǎng)景;

比如:圖片常用于頭像和證明材料;Excel偏向業(yè)務(wù)數(shù)據(jù)導(dǎo)入導(dǎo)出;CSV偏向技術(shù)層面數(shù)據(jù)搬運(yùn);PDF和Word用于文檔類的材料保存等;

下面的案例只圍繞普通文件Excel兩種類型進(jìn)行代碼實(shí)現(xiàn);

二、工程搭建

1、工程結(jié)構(gòu)

SpringBoot3文件管理

2、依賴管理

普通文件的上傳下載,依賴spring-boot框架即可,而Excel類型選擇easyexcel組件,該組件內(nèi)部依賴了apache-poi組件的4.1.2版本;

<!-- 基礎(chǔ)框架組件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring-boot.version}</version>
</dependency>

<!-- Excel組件 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

三、上傳下載

1、配置管理

在配置文件中,添加max-file-size單個(gè)文件大小限制和max-request-size請(qǐng)求最大限制兩個(gè)核心參數(shù);

需要說明的一點(diǎn)是:如何設(shè)定參數(shù)值的大小,與業(yè)務(wù)場(chǎng)景和服務(wù)器的處理能力都有關(guān)系,在測(cè)試的過程中優(yōu)化即可;

spring:
  # 文件配置
  servlet:
    multipart:
      enabled: true
      # 文件單個(gè)限制
      max-file-size: 10MB
      # 請(qǐng)求最大限制
      max-request-size: 20MB

2、上傳下載

這里提供一個(gè)文件批量上傳接口和一個(gè)文件下載接口,把文件管理在工程中的resources/file目錄下,下載接口中需要指定該目錄下的文件名稱;

@RestController
public class FileWeb {
    private static final Logger logger = LoggerFactory.getLogger(FileWeb.class);
    @Resource
    private FileService fileService ;

    /**
     * 文件上傳
     */
    @PostMapping("/file/upload")
    public String upload (HttpServletRequest request,
                          @RequestParam("file") MultipartFile[] fileList) throws Exception {
        String uploadUser = request.getParameter("uploadUser");
        if (uploadUser.isEmpty()){
            return "upload-user is empty";
        }
        logger.info("upload-user:{}",uploadUser);
        for (MultipartFile multipartFile : fileList) {
            // 解析文件信息和保存
            fileService.dealFile(multipartFile);
        }
        return "success" ;
    }
    /**
     * 文件下載
     */
    @GetMapping("/file/download")
    public void upload (@RequestParam("fileName") String fileName,
                        HttpServletResponse response) throws Exception {
        if (!fileName.isBlank()){
            String filePath = ResourceUtils.getURL("m1-04-boot-file/src/main/resources/file").getPath();
            File file = new File(filePath,fileName) ;
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
            response.setContentType("application/octet-stream");
            Files.copy(Paths.get(file.getPath()), response.getOutputStream());
        }
    }
}

/**
 * 文件服務(wù)類
 */
@Service
public class FileService {

    private static final Logger logger = LoggerFactory.getLogger(FileService.class);

    public void dealFile (MultipartFile multipartFile) throws Exception {
        logger.info("Name >> {}",multipartFile.getName());
        logger.info("OriginalFilename >> {}",multipartFile.getOriginalFilename());
        logger.info("ContentType >> {}",multipartFile.getContentType());
        logger.info("Size >> {}",multipartFile.getSize());
        // 文件輸出地址
        String filePath = ResourceUtils.getURL("m1-04-boot-file/src/main/resources/file").getPath();
        File writeFile = new File(filePath, multipartFile.getOriginalFilename());
        multipartFile.transferTo(writeFile);
    }
}

使用Postman測(cè)試文件批量上傳接口:

SpringBoot3文件管理

四、Excel文件

1、Excel創(chuàng)建

基于easyexcel組件中封裝的EasyExcel工具類,繼承自EasyExcelFactory工廠類,實(shí)現(xiàn)Excel單個(gè)或多個(gè)Sheet的創(chuàng)建,并且在單個(gè)Sheet中寫多個(gè)Table數(shù)據(jù)表;

@Service
public class ExcelService {
    /**
     * Excel-寫單個(gè)Sheet
     */
    public static void writeSheet () throws Exception {
        // 文件處理
        String basePath = getAbsolutePath();
        File file = new File(basePath+"/easy-excel-01.xlsx") ;
        checkOrCreateFile(file);
        // 執(zhí)行寫操作
        EasyExcel.write(file).head(DataVO.class)
                .sheet(0,"用戶信息").doWrite(DataVO.getSheet1List());
    }
    /**
     * Excel-寫多個(gè)Sheet
     */
    public static void writeSheets () throws Exception {
        // 文件處理
        String basePath = getAbsolutePath();
        File file = new File(basePath+"/easy-excel-02.xlsx") ;
        checkOrCreateFile(file);
        ExcelWriter excelWriter = null;
        try {
            excelWriter = EasyExcel.write(file).build();
            // Excel-Sheet1
            WriteSheet writeSheet1 = EasyExcel.writerSheet(0,"分頁(yè)1").head(DataVO.class).build();
            // Excel-Sheet2
            WriteSheet writeSheet2 = EasyExcel.writerSheet(1,"分頁(yè)2").head(DataVO.class).build();
            // Excel-Sheet3,寫兩個(gè)Table
            WriteSheet writeSheet3 = EasyExcel.writerSheet(2,"分頁(yè)3").build();
            WriteTable dataTable = EasyExcel.writerTable(0).head(DataVO.class).build();
            WriteTable dataExtTable = EasyExcel.writerTable(1).head(DataExtVO.class).build();
            // 執(zhí)行寫操作
            excelWriter.write(DataVO.getSheet1List(), writeSheet1);
            excelWriter.write(DataVO.getSheet2List(), writeSheet2);
            excelWriter.write(DataVO.getSheet1List(),writeSheet3,dataTable) ;
            excelWriter.write(DataExtVO.getSheetList(),writeSheet3,dataExtTable) ;
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            if (excelWriter != null){
                excelWriter.close();
            }
        }
    }
}

/**
 * 實(shí)體類,這里的注解會(huì)解析為Excel中的表頭
 */
public class DataVO {
    @ExcelProperty("編號(hào)")
    private Integer id ;
    @ExcelProperty("名稱")
    private String name ;
    @ExcelProperty("手機(jī)號(hào)")
    private String phone ;
    @ExcelProperty("城市")
    private String cityName ;
    @ExcelProperty("日期")
    private Date date ;
}

文件效果:

SpringBoot3文件管理

2、Excel讀取

對(duì)于讀取Excel文件來說,則需要根據(jù)具體的樣式來定了,在easyexcel組件中還可以添加讀取過程的監(jiān)聽器;

@Service
public class ExcelService {
    /**
     * Excel-讀取數(shù)據(jù)
     */
    public static void readExcel () throws Exception {
        // 文件處理
        String basePath = getAbsolutePath();
        File file = new File(basePath+"/easy-excel-01.xlsx") ;
        if (!file.exists()){
            return ;
        }
        // 讀取數(shù)據(jù)
        List<DataVO> dataList = EasyExcel.read(file).head(DataVO.class)
                .sheet(0).headRowNumber(1).doReadSync();
        dataList.forEach(System.out::println);
    }
    /**
     * Excel-讀取數(shù)據(jù)使用解析監(jiān)聽器
     */
    public static void readExcelListener () throws Exception {
        // 文件處理
        String basePath = getAbsolutePath();
        File file = new File(basePath+"/easy-excel-01.xlsx") ;
        if (!file.exists()){
            return ;
        }
        // 讀取數(shù)據(jù),并且使用解析監(jiān)聽器
        DataListener dataListener = new DataListener() ;
        List<DataVO> dataSheetList = EasyExcel.read(file,dataListener).head(DataVO.class)
                .sheet(0).headRowNumber(1).doReadSync();
        dataSheetList.forEach(System.out::println);
    }
}

3、解析監(jiān)聽

繼承AnalysisEventListener類,并重寫其中的方法,可以監(jiān)聽Excel的解析過程,或者添加一些自定義的處理邏輯;

public class DataListener extends AnalysisEventListener<DataVO> {
    /**
     * 接收解析的數(shù)據(jù)塊
     */
    @Override
    public void invoke(DataVO data, AnalysisContext context) {
        System.out.println("DataListener:"+data);
    }
    /**
     * 接收解析的表頭
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("DataListener:"+headMap);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("DataListener:after...all...analysed");
    }
}

4、導(dǎo)入導(dǎo)出

實(shí)際上Excel文件的導(dǎo)入導(dǎo)出,原理與文件的上傳下載類似,只不過這里使用easyexcel組件中的API來直接處理Excel的寫和讀;

@RestController
public class ExcelWeb {

    @GetMapping("excel/download")
    public void download(HttpServletResponse response) throws IOException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("Excel數(shù)據(jù)", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), DataVO.class).sheet("用戶").doWrite(DataVO.getSheet1List());
    }

    @ResponseBody
    @PostMapping("excel/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        List<DataVO> dataList = EasyExcel
                .read(file.getInputStream(), DataVO.class, new DataListener()).sheet().doReadSync();
        dataList.forEach(System.out::println);
        return "success";
    }
}

使用Postman測(cè)試單個(gè)Excel上傳接口:

SpringBoot3文件管理文章來源地址http://www.zghlxwxcb.cn/news/detail-636909.html

五、參考源碼

文檔倉(cāng)庫(kù):
https://gitee.com/cicadasmile/butte-java-note

源碼倉(cāng)庫(kù):
https://gitee.com/cicadasmile/butte-spring-parent

到了這里,關(guān)于SpringBoot3文件管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot3 GraalVM 原生鏡像打包 搭建云原生環(huán)境

    SpringBoot3 GraalVM 原生鏡像打包 搭建云原生環(huán)境

    java發(fā)布到如今,已經(jīng)過去幾十年,如今微服務(wù)、云原生逐漸成為了主流,java原本的很多優(yōu)勢(shì)不再重要,而啟動(dòng)慢,耗內(nèi)存等的缺點(diǎn)也越來越被放大. java在新發(fā)布的很多相關(guān)技術(shù)中也做出了很多改變 其中SpringBoot3結(jié)合GraalVM,可以直接將java項(xiàng)目打包成原生可執(zhí)行文件,提升運(yùn)行速度并大

    2024年02月06日
    瀏覽(51)
  • Java --- springboot3依賴管理和自動(dòng)配置機(jī)制

    Java --- springboot3依賴管理和自動(dòng)配置機(jī)制

    目錄 一、依賴管理機(jī)制 二、自動(dòng)配置機(jī)制? 三、自動(dòng)配置流程 ?? 、為什么導(dǎo)入 starter-web 所有相關(guān)依賴都導(dǎo)入進(jìn)來? ①、開發(fā)什么場(chǎng)景,導(dǎo)入什么 場(chǎng)景啟動(dòng)器。 ②、maven依賴傳遞原則。A-B-C: A就擁有B和C ③、導(dǎo)入 場(chǎng)景啟動(dòng)器。 場(chǎng)景啟動(dòng)器 自動(dòng)把這個(gè)場(chǎng)景的所有核心依賴

    2024年02月07日
    瀏覽(23)
  • springboot3整合consul實(shí)現(xiàn)服務(wù)注冊(cè)和配置管理快速入門

    springboot3整合consul實(shí)現(xiàn)服務(wù)注冊(cè)和配置管理快速入門

    服務(wù)注冊(cè): 配置管理: 注冊(cè)中心的比較: 在微服務(wù)的世界中,服務(wù)注冊(cè)是必不可少的。現(xiàn)在比較流行的也就是Consul和Nacos,Zookeeper沒有管理界面,一般不建議使用,而Eureka已經(jīng)處于停更,并且本身就存在很多bug,一般不建議使用! 我之前寫過一篇spring boot整合nacos實(shí)現(xiàn)服務(wù)注

    2024年04月16日
    瀏覽(23)
  • SpringBoot3中的屬性綁定注解和YMAL配置文件、日志

    SpringBoot摒棄XML配置方式,改為 全注解驅(qū)動(dòng) 1. 組件注冊(cè) @Configuration 、 @SpringBootConfiguration @Bean 、 @Scope @Controller 、 @Service 、 @Repository 、 @Component @Import @ComponentScan 步驟: 1、@Configuration 編寫一個(gè)配置類 2、在配置類中,自定義方法給容器中注冊(cè)組件。配合@Bean 3、或使用@Import

    2024年02月11日
    瀏覽(19)
  • SpringBoot3.0整合RocketMQ時(shí)出現(xiàn)未能加載bean文件

    SpringBoot3.0整合RocketMQ時(shí)出現(xiàn)未能加載bean文件

    問題 APPLICATION FAILED TO START Description: Field rocketMQTemplate in com.spt.message.service.MqProducerService required a bean of type ‘org.apache.rocketmq.spring.core.RocketMQTemplate’ that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider

    2024年02月12日
    瀏覽(24)
  • 最新版 !快速掌握J(rèn)DK17 + springboot3 + springcloud Alibaba : 1、 微服務(wù)環(huán)境搭建

    最新版 !快速掌握J(rèn)DK17 + springboot3 + springcloud Alibaba : 1、 微服務(wù)環(huán)境搭建

    最新版 !快速掌握J(rèn)DK17 + springboot3 + springcloud Alibaba 專欄 2、服務(wù)治理 Nacos Discovery 3、遠(yuǎn)程調(diào)用負(fù)載均衡 Ribbon 4、遠(yuǎn)程調(diào)用Feign 5、服務(wù)熔斷降級(jí) Sentinel 源碼 為了方便講解SpringCloud課程,我們以最常見的電商項(xiàng)目2個(gè)核心模塊:商品模塊、訂單模塊為例子,一一講解SpringCloud組件

    2024年02月05日
    瀏覽(41)
  • JAVA新實(shí)戰(zhàn)1:使用vscode+gradle+openJDK21搭建java springboot3項(xiàng)目開發(fā)環(huán)境

    JAVA新實(shí)戰(zhàn)1:使用vscode+gradle+openJDK21搭建java springboot3項(xiàng)目開發(fā)環(huán)境

    ? ? ? ? 作為一個(gè)干了多年的全棧技術(shù)工程師,厭倦了使用盜版IDE,近些年開發(fā)Java一直使用IntelliJ IDEA進(jìn)行Springboot后端項(xiàng)目開發(fā),對(duì)于IntelliJ IDEA 授權(quán)問題,一直花錢買學(xué)生類的授權(quán),但經(jīng)常被屏蔽,無法使用,又不舍得花大錢買企業(yè)版,索性不再使用了。決定改用 VsCode+Gr

    2024年02月03日
    瀏覽(22)
  • 工程管理系統(tǒng)簡(jiǎn)介 工程管理系統(tǒng)源碼 java工程管理系統(tǒng) 工程管理系統(tǒng)功能設(shè)計(jì)

    工程管理系統(tǒng)簡(jiǎn)介 工程管理系統(tǒng)源碼 java工程管理系統(tǒng) 工程管理系統(tǒng)功能設(shè)計(jì)

    ?鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng) 1. 項(xiàng)目背景 一、隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營(yíng)規(guī)模不斷壯大。為了提高工程管理效率、減輕勞動(dòng)強(qiáng)度、提高信息處理速度和準(zhǔn)確性,公司對(duì)內(nèi)部工程管理的提升提出了更高

    2024年02月07日
    瀏覽(19)
  • Nginx目錄結(jié)構(gòu)簡(jiǎn)介:深入理解Nginx的默認(rèn)文件和目錄

    Nginx目錄結(jié)構(gòu)簡(jiǎn)介:深入理解Nginx的默認(rèn)文件和目錄

    第一章 Nginx的默認(rèn)目錄結(jié)構(gòu) 當(dāng)你安裝Nginx后,它的默認(rèn)目錄結(jié)構(gòu)如下: 讓我們逐個(gè)了解這些目錄和文件的作用。 第二章 conf目錄 conf目錄包含了Nginx的配置文件,其中nginx.conf是Nginx主配置文件,它包含了所有全局的Nginx配置項(xiàng)。mime.types文件包含了MIME類型的定義,它告訴Nginx如

    2024年02月13日
    瀏覽(20)
  • Java版本工程管理系統(tǒng)源碼&企業(yè)工程項(xiàng)目管理系統(tǒng)簡(jiǎn)介

    Java版本工程管理系統(tǒng)源碼&企業(yè)工程項(xiàng)目管理系統(tǒng)簡(jiǎn)介

    ???? ?一、立項(xiàng)管理 1、招標(biāo)立項(xiàng)申請(qǐng) 功能點(diǎn):招標(biāo)類項(xiàng)目立項(xiàng)申請(qǐng)入口,用戶可以保存為草稿,提交。 2、非招標(biāo)立項(xiàng)申請(qǐng) 功能點(diǎn):非招標(biāo)立項(xiàng)申請(qǐng)入口、用戶可以保存為草稿、提交。 3、采購(gòu)立項(xiàng)列表 功能點(diǎn):對(duì)草稿進(jìn)行編輯,駁回的立項(xiàng)編輯,在途流程查看。 二、項(xiàng)

    2024年02月15日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包