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

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

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

前言

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

MultipartFile轉(zhuǎn)File

其實轉(zhuǎn)換的本質(zhì)都是要創(chuàng)建一個file的臨時文件,然后通過各種實現(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 測試MultipartFile與File互轉(zhuǎn)
 * @date 2023-03-12 17:31
 **/
public class FileTestUtils {


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

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

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

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

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

        return file;
    }

}

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

2.multipartFile.transferTo(tempFile);

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

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

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

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

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

        multipartFile.transferTo(tempFile);

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

        return tempFile;
    }

注意:
1.防止生成的臨時文件,createTempFile()方法會在文件名后添加隨機碼
2.生成的文件不會立馬刪除,而是在jvm退出時執(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 測試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ì)上還是在項目根路徑創(chuàng)建文件
            file = new File(multipartFile.getOriginalFilename());

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

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

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

在這里插入圖片描述

File轉(zhuǎn)MultipartFile

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

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

在這里插入圖片描述

MultipartFile是一個接口,因此轉(zhuǎn)成MultipartFile格式需要轉(zhuǎn)成實現(xiàn)MultipartFile接口的實現(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 測試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)的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java MultipartFile與File互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何讀取json文件

    Python如何讀取json文件

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

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

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

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

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

    python利用裝飾器進行運算的實例分析

    本文主要是通過使用Python的裝飾器來做一個運算的實例,來給大家詳細介紹下Python的裝飾器,非常的實用,有需要的小伙伴可以參考下。
    2015-08-08
  • Python使用指定字符長度切分數(shù)據(jù)示例

    Python使用指定字符長度切分數(shù)據(jù)示例

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

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

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

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

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

    Pycharm添加虛擬解釋器報錯問題解決方案

    這篇文章主要介紹了Pycharm添加虛擬解釋器報錯問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • python raise的基本使用

    python raise的基本使用

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

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

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

最新評論

石渠县| 从化市| 巫溪县| 抚远县| 瓦房店市| 象山县| 兴安县| 巴楚县| 兰坪| 井陉县| 浙江省| 广东省| 武安市| 游戏| 含山县| 鸡东县| 五常市| 乌拉特后旗| 贵溪市| 潍坊市| 清徐县| 吴堡县| 册亨县| 康定县| 阳新县| 太仆寺旗| 安福县| 清河县| 鄂州市| 茂名市| 通州市| 瓮安县| 黄石市| 图木舒克市| 新乡市| 那曲县| 大石桥市| 黑水县| 渭南市| 体育| 黄山市|