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

Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換的代碼詳解

 更新時(shí)間:2024年04月03日 11:40:51   作者:笑小楓  
File、Base64和MultipartFile都是在編程中常用的類(lèi)或者數(shù)據(jù)類(lèi)型,用于處理文件和數(shù)據(jù)的存儲(chǔ)、傳輸和轉(zhuǎn)換等操作,本文將給大家介紹了Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下

文件轉(zhuǎn)base64字符串

/**
 * file轉(zhuǎn)換為base64
 * 注意:這里轉(zhuǎn)換為base64后,是不包含文件head頭的
 */
public static String fileToBase64(File file) {
    Base64.Encoder base64 = Base64.getEncoder();
    String base64Str = null;
    try (FileInputStream fis = new FileInputStream(file);
         ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
        byte[] b = new byte[1024];
        int n;
        while ((n = fis.read(b)) != -1) {
            bos.write(b, 0, n);
        }
        base64Str = base64.encodeToString(bos.toByteArray());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return base64Str;
}

base64字符串轉(zhuǎn)文件

/**
 * base64轉(zhuǎn)化為file,并保存到指定路徑下
 */
public static void base64ToFile(String base, String path) {
    if (StringUtils.isBlank(base)) {
        return;
    }
    Base64.Decoder decoder = Base64.getDecoder();
    try (OutputStream out = new FileOutputStream(path)) {
        byte[] bytes = decoder.decode(base);
        for (int i = 0; i < bytes.length; ++i) {
            if (bytes[i] < 0) {
                bytes[i] += 256;
            }
        }
        out.write(bytes);
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

base64轉(zhuǎn)化為file流

/**
 * base64轉(zhuǎn)化為file流
 */
public static File base64ToFile(String base64) {
    if (base64 == null || "".equals(base64)) {
        return null;
    }
    byte[] buff = Base64.getDecoder().decode(base64);

    File file;
    try {
        file = File.createTempFile("tmp", null);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
    try (FileOutputStream out = new FileOutputStream(file)) {
        out.write(buff);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return file;
}

base64轉(zhuǎn)MultipartFile

import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.Base64;

/**
 * @author 笑小楓
 */
public class Base64DecodedMultipartFile implements MultipartFile {
    private final byte[] imgContent;
    private final String header;
    private final String fileName;

    public Base64DecodedMultipartFile(byte[] imgContent, String header, String fileName) {
        this.imgContent = imgContent;
        this.header = header.split(";")[0];
        this.fileName = fileName;
    }

    @Override
    public String getName() {
        return fileName + "." + header.split("/")[1];
    }

    @Override
    public String getOriginalFilename() {
        return fileName + "." + header.split("/")[1];
    }

    @Override
    public String getContentType() {
        return header.split(":")[1];
    }

    @Override
    public boolean isEmpty() {
        return imgContent == null || imgContent.length == 0;
    }

    @Override
    public long getSize() {
        return imgContent.length;
    }

    @Override
    public byte[] getBytes() {
        return imgContent;
    }

    @Override
    public InputStream getInputStream() {
        return new ByteArrayInputStream(imgContent);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        try (FileOutputStream fos = new FileOutputStream(dest)) {
            fos.write(imgContent);
        }
    }

    /**
     * base64轉(zhuǎn)multipartFile
     **/
    public static MultipartFile base64Convert(String base64, String header, String fileName) {
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] b = decoder.decode(base64);
        //取索引為1的元素進(jìn)行處理
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {
                b[i] += 256;
            }
        }
        // 處理過(guò)后的數(shù)據(jù)通過(guò)Base64DecodeMultipartFile轉(zhuǎn)換為MultipartFile對(duì)象
        return new Base64DecodedMultipartFile(b, header, fileName);
    }
}

byte數(shù)組轉(zhuǎn)MultiPartFile

  • POM導(dǎo)入
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>RELEASE</version>
</dependency>
  • 代碼部分
byte[] bytes = message.getPacket();
InputStream inputStream = new ByteArrayInputStream(bytes);
MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);

MultipartFile轉(zhuǎn)化為byte數(shù)組

byte[] bytes= file.getBytes();

以上就是Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換的代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于Java File、Base64、MultipartFile轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot工程中使用filter過(guò)程解析

    Springboot工程中使用filter過(guò)程解析

    這篇文章主要介紹了springboot工程中使用filter過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談collection標(biāo)簽的oftype屬性能否為java.util.Map

    淺談collection標(biāo)簽的oftype屬性能否為java.util.Map

    這篇文章主要介紹了collection標(biāo)簽的oftype屬性能否為java.util.Map,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot作為Java生態(tài)中最流行的微服務(wù)框架之一,以其開(kāi)箱即用、快速開(kāi)發(fā)的特性贏得了廣泛青睞,然而,許多開(kāi)發(fā)者在日常使用中往往只關(guān)注了基礎(chǔ)功能,忽略了框架提供的許多高性能配置選項(xiàng),本文將深入剖析7個(gè)鮮為人知但極具價(jià)值的SpringBoot配置技巧
    2025-09-09
  • 為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)

    為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)

    這篇文章主要介紹了為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java生成圖片驗(yàn)證碼實(shí)例代碼

    java生成圖片驗(yàn)證碼實(shí)例代碼

    這篇文章主要介紹了java生成圖片驗(yàn)證碼實(shí)例代碼,驗(yàn)證碼的種類(lèi)有很多,問(wèn)題驗(yàn)證、短信驗(yàn)證還有常見(jiàn)的圖片驗(yàn)證,本文就為大家介紹生成圖片驗(yàn)證碼最簡(jiǎn)單方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • java反射如何獲取方法屬性和方法調(diào)用

    java反射如何獲取方法屬性和方法調(diào)用

    這篇文章主要介紹了java反射如何獲取方法屬性和方法調(diào)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring?Security?OAuth?Client配置加載源碼解析

    Spring?Security?OAuth?Client配置加載源碼解析

    這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    這篇文章主要介紹了Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法,涉及Java針對(duì)字符串的遍歷、查找、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Spring Boot攔截器和過(guò)濾器實(shí)例解析

    Spring Boot攔截器和過(guò)濾器實(shí)例解析

    這篇文章主要介紹了Spring Boot攔截器和過(guò)濾器實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記

    spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記

    這篇文章主要介紹了spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論

南郑县| 玉山县| 桐庐县| 江华| 铁力市| 宝丰县| 庆云县| 盈江县| 手机| 天气| 拜泉县| 普宁市| 新邵县| 闽侯县| 洛宁县| 杭州市| 宁河县| 兴仁县| 北海市| 澄迈县| 上犹县| 铁力市| 彭阳县| 若尔盖县| 平顶山市| 黄山市| 甘泉县| 南乐县| 喀喇沁旗| 曲水县| 都江堰市| 韶山市| 台中市| 铁力市| 贺州市| 楚雄市| 鄂托克旗| 渝中区| 泽普县| 浙江省| 蓝山县|