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

關(guān)于File與MultipartFile的用法概述

 更新時間:2023年09月22日 09:32:40   作者:葉楓^_^  
這篇文章主要介紹了關(guān)于File與MultipartFile的用法概述,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.MultipartFile 概述

MultipartFile是SpringMVC提供簡化文件流操作的接口,該接口實現(xiàn)類有如下幾個

在這里插入圖片描述

在不使用框架之前,都是使用原生的HttpServletRequest來接收上傳的數(shù)據(jù)的,如下所示:

public String fileSave(HttpServletRequest request, HttpServletResponse response){
	MultipartHttpServletRequest msr = (MultipartHttpServletRequest) request;
    MultipartFile targetFile = msr.getFile("file");
}

此處附上處理文件的一般操作

// MultipartFile targetFile
// 文件寫入路徑 每次寫文件的時候要保證 路徑唯一 不會發(fā)生寫入文件覆蓋的問題
String fileName = targetFile.getOriginalFilename();
LOGGER.info("fileOnlineShowServiceImpl  ==> fileSave() fileName : {}", fileName);
// 臨時將文件存放本地存儲位置
String tempFilePath = downloadPath + File.separator + ToolsUtil.createUUID() + "_" + fileName;
// 將文件寫入到本地 localPath
targetFile.transferTo(new File(tempFilePath));
LOGGER.info("fileOnlineShowServiceImpl ==> fileSave() tempFilePath : {}", tempFilePath);
// 將內(nèi)存的文件上傳阿里云OSS,并轉(zhuǎn)換成圖片,返回對應(yīng)的信息
Map<String, String> fileInfoMaps = fileDealWithService.dealWithFileService(ComonConstant.DIGIT_LONG_ONE, tempFilePath, Boolean.TRUE);
// 將寫入后的數(shù)據(jù)新增到數(shù)據(jù)記錄表中
addNewRecorde(fileSaveReqDTO, fileInfoMaps , yhSystemUsers);

文件是以二進制流傳遞到后端的,然后需要我們自己轉(zhuǎn)換為File類。

使用MultipartFile接口中提供的實現(xiàn)方法,我們對文件處理的操作就會變得很便捷。

MultipartFile接口方法如下:

package org.springframework.web.multipart;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.FileCopyUtils;
public interface MultipartFile extends InputStreamSource {
	//返回參數(shù)的名稱
    String getName();
	// 獲取源文件的名稱
    @Nullable
    String getOriginalFilename();
	// 返回文件的內(nèi)容類型
    @Nullable
    String getContentType();
	// 判斷文件內(nèi)容是否為空
    boolean isEmpty();
	// 返回文件大小 以字節(jié)為單位
    long getSize();
	// 將文件內(nèi)容轉(zhuǎn)化成一個byte[] 返回
    byte[] getBytes() throws IOException;
	// 返回輸入的文件流
    InputStream getInputStream() throws IOException;
    default Resource getResource() {
        return new MultipartFileResource(this);
    }
    void transferTo(File var1) throws IOException, IllegalStateException;
	// 將MultipartFile 轉(zhuǎn)換換成 File 寫入到指定路徑
    default void transferTo(Path dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
    }
}

2.MultipartFile 轉(zhuǎn)File

知悉了MultipartFile 后,我們知道MultipartFile 內(nèi)部提供了MultipartFile 轉(zhuǎn)File.

// 臨時將文件存放本地存儲位置
String tempFilePath = downloadPath + File.separator + ToolsUtil.createUUID() + "_" + fileName;
// 將文件寫入到本地 downloadPath
targetFile.transferTo(new File(tempFilePath));

同時想必大家平時也經(jīng)常做過類似的處理,常見的如下操作:

public void writeFileToLocal(MultipartFile targetFile) {
        //開始時間
        LocalDateTime startTime = LocalDateTime.now();
        BufferedInputStream bufferedReader = null;
        BufferedOutputStream bufferedWriter = null;
        try {
            bufferedReader = new BufferedInputStream(targetFile.getInputStream());
            bufferedWriter = new BufferedOutputStream(new FileOutputStream(downloadPath + File.separator +targetFile.getOriginalFilename()));
            int len=0;
            //字節(jié)緩沖區(qū)
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while ((len = bufferedReader.read(buffer.array())) != -1) {
                bufferedWriter.write(buffer.array(),0,len);
                bufferedWriter.flush();
            }
            LOGGER.info("writeFileToLocal ==> 耗時:" + Duration.between(startTime, LocalDateTime.now()).toMillis());
        } catch (Exception e) {
            LOGGER.info("writeFileToLocal 文件寫入失敗");
        }finally {
            if (null != bufferedReader) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    LOGGER.info("writeFileToLocal 文件寫入失敗");
                }
            }
            if (null != bufferedWriter) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    LOGGER.info("writeFileToLocal 文件寫入失敗");
                }
            }
        }
    }

3.File 轉(zhuǎn) MultipartFile

概述中有講到Spring提供了MultipartFile 接口四個實現(xiàn)類,我們只需將File對象傳入到對應(yīng)實現(xiàn)類的構(gòu)造方法中,即可實現(xiàn)File 轉(zhuǎn) MultipartFile,此處提供一個案例如下所示:

File file = new File(filePath);  // 文件路徑
FileInputStream input = new FileInputStream(file);
// File 轉(zhuǎn) MultipartFile
MultipartFile targetFiles = new MockMultipartFile("targetFiles",file.getName(),null,IOUtils.toByteArray(input));
String fileName = targetFiles.getOriginalFilename(); // 源文件名

我們經(jīng)常會去對路徑提取文件名,以及文件類型,下面貼出集中l(wèi)ang3提供的常用的方法

(1).substringAfter

// 切割文件路徑 獲取"_"后的文件名
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringAfter(textType, "_");
System.out.println("subRet  = " + subRet );

輸出結(jié)果:

subRet  = yta_sder.pdf

(2).substringAfterLast

// 獲取最后一個"."切割符后的字符串 往往用作獲取文件類型
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringAfterLast(textType, ".");
System.out.println("subRet  = " + subRet );

輸出結(jié)果:

subRet  = pdf

(3).substringBefore

// 獲取"."切割符前的字符串 往往用作獲取文件名
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringBefore(textType, ".");
System.out.println("subRet  = " + subRet );

輸出結(jié)果:

subRet  = Af_yta_sder

(4).substringBeforeLast

// 獲取最后一個切割符"_"前的字符串
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringBeforeLast(textType, "_");
System.out.println("subRet  = " + subRet );

subRet  = Af_yta

其他類似的方法大同小異,此處就不一一列舉了。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA使用properties配置文件進行mysql數(shù)據(jù)庫連接的教程圖解

    IDEA使用properties配置文件進行mysql數(shù)據(jù)庫連接的教程圖解

    Properties類是 鍵和值均為字符串的可以永久存儲到文件中的key-value集合。這篇文章主要介紹了IDEA使用properties配置文件進行mysql數(shù)據(jù)路連接 ,需要的朋友可以參考下
    2018-10-10
  • idea設(shè)置在包里面在創(chuàng)建一個包方式

    idea設(shè)置在包里面在創(chuàng)建一個包方式

    這篇文章主要介紹了idea設(shè)置在包里面在創(chuàng)建一個包方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot整合Liquibase的示例代碼

    SpringBoot整合Liquibase的示例代碼

    本篇文章給大家介紹SpringBoot整合Liquibase的兩種情況分析,看似整合問題很簡單,但是很容易出錯,下面小編給大家介紹下整合步驟,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Spring Data MongoDB的核心用法 附示例代碼

    Spring Data MongoDB的核心用法 附示例代碼

    本文將系統(tǒng)梳理Spring Data MongoDB 的核心用法,涵蓋實體類注解、增刪改查、條件查詢、分頁排序等常見場景,并提供可直接復(fù)用的代碼示例,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • 顯示SonarQube私有項目徽章方案流程

    顯示SonarQube私有項目徽章方案流程

    這篇文章主要為大家介紹了如何顯示SonarQube私有項目徽章方案的流程,sonarQube目前不支持私有項目的徽章圖片獲取,這個問題早在?2018年就在sonar社區(qū)里有過激烈的討論,至今無果,只能自己尋求一種可以快速實施的方案
    2022-02-02
  • Java+OpenCV調(diào)用攝像頭實現(xiàn)拍照功能

    Java+OpenCV調(diào)用攝像頭實現(xiàn)拍照功能

    隨著我們對環(huán)境、Mat基本使用越來越熟練、Java Swing也逐步熟悉了起來。本文將通過OpenCV驅(qū)動攝像頭實現(xiàn)識臉和拍照功能,需要的可以參考一下
    2022-03-03
  • 手把手教你如何在idea中搭建SpringBoot項目

    手把手教你如何在idea中搭建SpringBoot項目

    這篇文章主要介紹了如何搭建一個SpringBoot項目,包括環(huán)境準備、創(chuàng)建新項目、探索項目結(jié)構(gòu)以及展望未來,通過詳細的步驟和實用的技巧,幫助開發(fā)者快速上手SpringBoot開發(fā),文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • 深入理解Java中的注解Annotation

    深入理解Java中的注解Annotation

    這篇文章主要介紹了深入理解Java中的注解Annotation,注解在Java中確實也很常見,但是人們常常不會自己定義一個注解拿來用,我們雖然很少去自定義注解,但是學(xué)會注解的寫法,注解的定義,學(xué)會利用反射解析注解中的信息,在開發(fā)中能夠使用到,這是很關(guān)鍵的,需要的朋友可以參考下
    2023-10-10
  • SpringSecurity?用戶帳號已被鎖定的問題及解決方法

    SpringSecurity?用戶帳號已被鎖定的問題及解決方法

    這篇文章主要介紹了SpringSecurity?用戶帳號已被鎖定,本文給大家分享問題原因及解決方式,需要的朋友可以參考下
    2023-12-12
  • java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作

    java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作

    這篇文章主要介紹了java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

泸定县| 苏尼特左旗| 蒙山县| 汶川县| 临朐县| 宁海县| 新宁县| 稻城县| 平昌县| 成武县| 黑山县| 安图县| 烟台市| 肥西县| 定州市| 乐陵市| 江都市| 炎陵县| 改则县| 岳阳县| 伊川县| 陵水| 庐江县| 临猗县| 泊头市| 胶州市| 闽清县| 仙游县| 东兴市| 东台市| 肇庆市| 乌兰察布市| 四平市| 泸州市| 当涂县| 绥阳县| 青海省| 南宁市| 安徽省| 松滋市| 高唐县|