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

Java中MultipartFile與File互轉(zhuǎn)的實(shí)現(xiàn)

 更新時(shí)間:2023年03月14日 10:52:37   作者:周全全  
本文主要介紹了Java中MultipartFile與File互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

需求是上傳Excel文件并讀取Excel文件中的內(nèi)容,根據(jù)獲取的數(shù)據(jù)執(zhí)行完某些業(yè)務(wù)操作后再將一些數(shù)據(jù)寫回到excel中。前臺(tái)使用FormData表單的方式請(qǐng)求后臺(tái),后臺(tái)接收類型是MultipartFile,放置文件過(guò)大時(shí)會(huì)造成內(nèi)存溢出需要轉(zhuǎn)換為File類型

MultipartFile轉(zhuǎn)File

其實(shí)轉(zhuǎn)換的本質(zhì)都是要?jiǎng)?chuàng)建一個(gè)file的臨時(shí)文件,然后通過(guò)各種實(shí)現(xiàn)方式將MultipartFile中的內(nèi)容寫入到file中

1.FileUtils.copyInputStreamToFile轉(zhuǎn)換

package com.cxstar.file.util;

import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @author zhouquan
 * @description 測(cè)試MultipartFile與File互轉(zhuǎn)
 * @date 2023-03-12 17:31
 **/
public class FileTestUtils {


    /**
     * MultipartFile轉(zhuǎn)File
     * <p>
     * 項(xiàng)目根路徑創(chuàng)建臨時(shí)文件,轉(zhuǎn)換得到File,再刪除臨時(shí)文件
     *
     * @param multipartFile
     * @return
     */
    public static File multiPartFileToFile(MultipartFile multipartFile) throws IOException {

        //獲取文件名
        String originalFilename = multipartFile.getOriginalFilename();

        //獲取默認(rèn)定位到的當(dāng)前用戶目錄("user.dir"),也就是當(dāng)前應(yīng)用的根路徑
        String tempDir = System.getProperty("user.dir");

        //根目錄下生成臨時(shí)文件
        File file = new File(tempDir+File.separator+originalFilename);

        FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);

        return file;
    }

}

此種方式的弊端就是需要在調(diào)用此方法后需要再手動(dòng)刪除,也就是要在業(yè)務(wù)代碼中再摻雜刪除的邏輯。

2.multipartFile.transferTo(tempFile);

/**
     * MultipartFile轉(zhuǎn)File
     * <p>
     * 項(xiàng)目根路徑創(chuàng)建緩沖區(qū)來(lái)實(shí)現(xiàn)這個(gè)轉(zhuǎn)換
     *
     * @param multipartFile
     * @return
     */
    public static File multiPartFileToFile2(MultipartFile multipartFile) throws IOException {

        //獲取文件名
        String originalFilename = multipartFile.getOriginalFilename();

        //獲取默認(rèn)定位到的當(dāng)前用戶目錄("user.dir"),也就是當(dāng)前應(yīng)用的根路徑
        String tempDir = System.getProperty("user.dir");

        //獲取文件名
        String filename = StringUtils.substringBeforeLast(originalFilename, ".");
        //獲取文件后綴
        String fileExt = StringUtils.substringAfterLast(originalFilename, ".");

        //在項(xiàng)目根路徑生成臨時(shí)文件
        File tempFile = File.createTempFile(filename, "." + fileExt, new File(tempDir));

        multipartFile.transferTo(tempFile);

        //在jvm退出時(shí)執(zhí)行刪除此路徑下的文件
        tempFile.deleteOnExit();

        return tempFile;
    }

注意:
1.防止生成的臨時(shí)文件,createTempFile()方法會(huì)在文件名后添加隨機(jī)碼
2.生成的文件不會(huì)立馬刪除,而是在jvm退出時(shí)執(zhí)行刪除此路徑下的文件

在這里插入圖片描述

3. (推薦)FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());

package com.cxstar.file.util;

import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * @author zhouquan
 * @description 測(cè)試MultipartFile與File互轉(zhuǎn)
 * @date 2023-03-12 17:31
 **/
public class FileTestUtils {
    /**
     * MultipartFile 轉(zhuǎn) File
     *
     * @param multipartFile
     * @throws Exception
     */
    public static File multiPartFileToFile3(MultipartFile multipartFile) {
        File file = null;
        if (multipartFile.isEmpty()) {
            return null;
        }

        try {
            //本質(zhì)上還是在項(xiàng)目根路徑創(chuàng)建文件
            file = new File(multipartFile.getOriginalFilename());

            //將MultipartFile的byte[]寫入到file中
            FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }
        return file;
    }
}

此種方式相較于第二種方式,文件名不會(huì)發(fā)生改變,當(dāng)然還是要手動(dòng)刪除

在這里插入圖片描述

File轉(zhuǎn)MultipartFile

MultipartFile文件上傳時(shí),其實(shí)springmvc已經(jīng)轉(zhuǎn)為StandardMultipartFile子類型

org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile

在這里插入圖片描述

MultipartFile是一個(gè)接口,因此轉(zhuǎn)成MultipartFile格式需要轉(zhuǎn)成實(shí)現(xiàn)MultipartFile接口的實(shí)現(xiàn)類即可

在這里插入圖片描述

package com.cxstar.file.util;

import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;

/**
 * @author zhouquan
 * @description 測(cè)試MultipartFile與File互轉(zhuǎn)
 * @date 2023-03-12 17:31
 **/
public class FileTestUtils {
    public static MultipartFile getMultipartFile(File file) throws Exception {
        MultipartFile multipartFile = new MockMultipartFile(file.getName(), new FileInputStream(file));
        return multipartFile;
}

 到此這篇關(guān)于Java中MultipartFile與File互轉(zhuǎn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java MultipartFile與File互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何讀取json文件

    Python如何讀取json文件

    這篇文章主要介紹了Python如何讀取json文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 利用python批量檢查網(wǎng)站的可用性

    利用python批量檢查網(wǎng)站的可用性

    當(dāng)大家的站點(diǎn)越來(lái)越來(lái)越多的時(shí)候會(huì)發(fā)現(xiàn)管理起來(lái)也挺復(fù)雜的,所以這篇文章給大家分享下利用python批量檢查網(wǎng)站的可用性的功能,對(duì)大家管理網(wǎng)站具有很實(shí)用的價(jià)值,有需要的朋友可以參考借鑒。
    2016-09-09
  • 教你怎么用Python處理excel實(shí)現(xiàn)自動(dòng)化辦公

    教你怎么用Python處理excel實(shí)現(xiàn)自動(dòng)化辦公

    這篇文章主要介紹了教你怎么用Python處理excel實(shí)現(xiàn)自動(dòng)化辦公,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python利用裝飾器進(jìn)行運(yùn)算的實(shí)例分析

    python利用裝飾器進(jìn)行運(yùn)算的實(shí)例分析

    本文主要是通過(guò)使用Python的裝飾器來(lái)做一個(gè)運(yùn)算的實(shí)例,來(lái)給大家詳細(xì)介紹下Python的裝飾器,非常的實(shí)用,有需要的小伙伴可以參考下。
    2015-08-08
  • Python使用指定字符長(zhǎng)度切分?jǐn)?shù)據(jù)示例

    Python使用指定字符長(zhǎng)度切分?jǐn)?shù)據(jù)示例

    今天小編就為大家分享一篇Python使用指定字符長(zhǎng)度切分?jǐn)?shù)據(jù)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Pycharm+django2.2+python3.6+MySQL實(shí)現(xiàn)簡(jiǎn)單的考試報(bào)名系統(tǒng)

    Pycharm+django2.2+python3.6+MySQL實(shí)現(xiàn)簡(jiǎn)單的考試報(bào)名系統(tǒng)

    這篇文章主要介紹了Pycharm+django2.2+python3.6+MySQL實(shí)現(xiàn)簡(jiǎn)單的考試報(bào)名系統(tǒng),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • selenium獲取元素定位的方法總結(jié)(動(dòng)態(tài)獲取元素)

    selenium獲取元素定位的方法總結(jié)(動(dòng)態(tài)獲取元素)

    要想操作一個(gè)元素,首先應(yīng)該識(shí)別這個(gè)元素,人有各種的特征(屬性),可以通過(guò)其特征找到人,同理,界面的某個(gè)元素會(huì)有各種的特征(屬性),可以通過(guò)這個(gè)屬性找到這對(duì)象,本文給大家介紹了python?selenium獲取元素定位的8種方法,需要的朋友可以參考下
    2024-02-02
  • Pycharm添加虛擬解釋器報(bào)錯(cuò)問(wèn)題解決方案

    Pycharm添加虛擬解釋器報(bào)錯(cuò)問(wèn)題解決方案

    這篇文章主要介紹了Pycharm添加虛擬解釋器報(bào)錯(cuò)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python raise的基本使用

    python raise的基本使用

    這篇文章主要介紹了python raise的基本使用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • python中將正則過(guò)濾的內(nèi)容輸出寫入到文件中的實(shí)例

    python中將正則過(guò)濾的內(nèi)容輸出寫入到文件中的實(shí)例

    今天小編就為大家分享一篇python中將正則過(guò)濾的內(nèi)容輸出寫入到文件中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論

湖口县| 临朐县| 株洲市| 方正县| 富阳市| 绥中县| 英超| 紫云| 定日县| 慈利县| 麻阳| 万安县| 尚志市| 锦屏县| 黑河市| 乐至县| 凤山市| 额尔古纳市| 琼中| 祁门县| 内黄县| 兴宁市| 平邑县| 宁晋县| 辽阳县| 怀集县| 玉溪市| 中牟县| 三亚市| 高碑店市| 榆树市| 惠来县| 博乐市| 赫章县| 南皮县| 扎兰屯市| 略阳县| 平阴县| 巫溪县| 辽中县| 得荣县|