欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中File、Base64、MultipartFile之間相互轉換的代碼詳解

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

文件轉base64字符串

/**
 * file轉換為base64
 * 注意:這里轉換為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字符串轉文件

/**
 * base64轉化為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轉化為file流

/**
 * base64轉化為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轉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轉multipartFile
     **/
    public static MultipartFile base64Convert(String base64, String header, String fileName) {
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] b = decoder.decode(base64);
        //取索引為1的元素進行處理
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {
                b[i] += 256;
            }
        }
        // 處理過后的數據通過Base64DecodeMultipartFile轉換為MultipartFile對象
        return new Base64DecodedMultipartFile(b, header, fileName);
    }
}

byte數組轉MultiPartFile

  • POM導入
<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轉化為byte數組

byte[] bytes= file.getBytes();

以上就是Java中File、Base64、MultipartFile之間相互轉換的代碼詳解的詳細內容,更多關于Java File、Base64、MultipartFile轉換的資料請關注腳本之家其它相關文章!

相關文章

  • Java中比較器Comparator和Comparable的區(qū)別

    Java中比較器Comparator和Comparable的區(qū)別

    這篇文章主要介紹了Java中比較器Comparator和Comparable的區(qū)別,我們在使用?Collections.sort()對鏈表進行排序時,常常需要根據不同情況自定義排序規(guī)則,今天我們來看看比較器之間的區(qū)別,需要的朋友可以參考下
    2023-08-08
  • Java8新日期時間API的20個使用示例

    Java8新日期時間API的20個使用示例

    這篇文章主要介紹了Java8新日期時間API的20個使用示例,為了學習Java 8的這個新庫,這里我創(chuàng)建了20個以任務為導向的例子,需要的朋友可以參考下
    2015-03-03
  • springboot整合mybatis-plus 實現分頁查詢功能

    springboot整合mybatis-plus 實現分頁查詢功能

    這篇文章主要介紹了springboot整合mybatis-plus 實現分頁查詢功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java中的靜態(tài)代碼塊使用解讀

    Java中的靜態(tài)代碼塊使用解讀

    本文將深入探討靜態(tài)代碼塊的工作原理、使用場景以及一些最佳實踐,幫助你更好地理解和應用這一特性
    2025-02-02
  • java String源碼和String常量池的全面解析

    java String源碼和String常量池的全面解析

    下面小編就為大家分享一篇java String源碼和String常量池的全面解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • MyBatis update標簽詳解

    MyBatis update標簽詳解

    這篇文章主要介紹了MyBatis update標簽,使用 Map 傳遞參數會導致業(yè)務可讀性的喪失,繼而導致后續(xù)擴展和維護的困難,所以在實際應用中我們應該果斷廢棄該方式,需要的朋友可以參考下
    2023-10-10
  • Spring框架概述及核心設計思想分享

    Spring框架概述及核心設計思想分享

    Spring框架是一種開源的Java企業(yè)級應用開發(fā)框架,提供了IoC(控制反轉)容器和DI(依賴注入)等核心設計思想,SpringBoot則是在Spring基礎上進一步簡化配置,提供了快速開發(fā)、內置服務器等功能,學習Spring框架需要掌握容器、IoC和DI等概念,以及分層設計等軟件工程思想
    2025-02-02
  • 通過JDK源碼分析關閉鉤子詳解

    通過JDK源碼分析關閉鉤子詳解

    一個簡單的關閉鉤子,程序被中斷或者正常退出時會顯示 hook shutdown!非常的優(yōu)雅,有效,巧妙。那么這篇文章就來給大家介紹關于通過JDK源碼分析關閉鉤子的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒。
    2017-11-11
  • 深入分析java文件路徑的詳解

    深入分析java文件路徑的詳解

    本篇文章是對java文件路徑進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • JWT整合Springboot的方法步驟

    JWT整合Springboot的方法步驟

    本文主要介紹了JWT整合Springboot的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論