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

如何將二進(jìn)制文件流轉(zhuǎn)化為MockMultipartFile文件

 更新時(shí)間:2025年02月11日 09:50:59   作者:唯有遺忘最漫長  
文章主要介紹了如何使用Spring框架中的MockMultipartFile類來模擬文件上傳,并處理上傳邏輯,包括獲取二進(jìn)制文件流、創(chuàng)建MockMultipartFile對象、處理上傳邏輯和返回響應(yīng),還解釋了MockMultipartFile的功能和二進(jìn)制文件流的定義

一、名詞解釋及業(yè)務(wù)解釋

1.具體業(yè)務(wù)流程

獲取二進(jìn)制文件流

  • 文件可以來自多個(gè)來源,如用戶上傳的文件、數(shù)據(jù)庫存儲(chǔ)的二進(jìn)制數(shù)據(jù)、文件系統(tǒng)中的文件等。
  • 讀取文件內(nèi)容,轉(zhuǎn)換為字節(jié)數(shù)組。

創(chuàng)建 MockMultipartFile 對象

  • 使用 MockMultipartFile 類,將字節(jié)數(shù)組、文件名和文件類型作為參數(shù)傳入構(gòu)造函數(shù)。
  • MockMultipartFile 是 Spring 提供的一個(gè)類,主要用于在測試中模擬文件上傳。

處理上傳邏輯

  • MockMultipartFile 傳遞給業(yè)務(wù)邏輯層,進(jìn)行文件的保存、處理或解析等操作。
  • 你可以在控制器中定義文件上傳的接口,處理接收到的文件。

返回響應(yīng)

  • 根據(jù)業(yè)務(wù)處理結(jié)果,返回相應(yīng)的響應(yīng)信息給客戶端。

2.轉(zhuǎn)換對象解釋

1. MockMultipartFile

功能:用于模擬文件上傳場景,特別是在測試中非常有用。

具體源碼:

package org.springframework.mock.web;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

public class MockMultipartFile implements MultipartFile {
    private final String name;
    private final String originalFilename;
    @Nullable
    private final String contentType;
    private final byte[] content;

    public MockMultipartFile(String name, @Nullable byte[] content) {
        this(name, "", (String)null, (byte[])content);
    }

    public MockMultipartFile(String name, InputStream contentStream) throws IOException {
        this(name, "", (String)null, (byte[])FileCopyUtils.copyToByteArray(contentStream));
    }

    public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) {
        Assert.hasLength(name, "Name must not be empty");
        this.name = name;
        this.originalFilename = originalFilename != null ? originalFilename : "";
        this.contentType = contentType;
        this.content = content != null ? content : new byte[0];
    }

    public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream) throws IOException {
        this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
    }

    public String getName() {
        return this.name;
    }

    @NonNull
    public String getOriginalFilename() {
        return this.originalFilename;
    }

    @Nullable
    public String getContentType() {
        return this.contentType;
    }

    public boolean isEmpty() {
        return this.content.length == 0;
    }

    public long getSize() {
        return (long)this.content.length;
    }

    public byte[] getBytes() throws IOException {
        return this.content;
    }

    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(this.content);
    }

    public void transferTo(File dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.content, dest);
    }
}

構(gòu)造參數(shù)

  • name: 表單中對應(yīng)的字段名(如 "file")。
  • originalFilename: 上傳文件的原始文件名(如 "test.txt")。
  • contentType: 文件的內(nèi)容類型(如 "text/plain")。
  • content: 文件的字節(jié)內(nèi)容(如 byte[])。

2. 二進(jìn)制文件流

定義:文件的原始數(shù)據(jù)以字節(jié)形式存儲(chǔ),可以是任何類型的文件(如圖片、文檔等)。

獲取方式

  • 從輸入流讀取(如 InputStream)。
  • 從數(shù)據(jù)庫中讀取二進(jìn)制數(shù)據(jù)。
  • 直接從文件系統(tǒng)中讀取。

二、編碼過程

1.引入spring依賴

        //引入spring-test依賴
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.8</version>
        </dependency>

2.寫方法

private String extracted(byte[] data) {
    //創(chuàng)建緩存輸出流
        BufferedOutputStream bos = null;
    //  FileOutputStream流是指文件字節(jié)輸出流,專用于輸出原始字節(jié)流如圖像數(shù)據(jù)等,其繼承OutputStream類,擁有輸出流的基本特性
        FileOutputStream fos = null;
    //創(chuàng)建文件對象
        File file = null;
        String fileName1 = "1.png";
        String filePath = System.getProperty("user.dir") + File.separator + File.separator;
        try {
            File file1 = new File(filePath);
            if (!file1.exists() && file1.isDirectory()) {
                file1.mkdirs();
            }
        // file 進(jìn)行賦值
            file = new File(filePath + "\\" + fileName1);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
        //將data寫入文件中
            bos.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //創(chuàng)建 MockMultipartFile 對象 MockMultipartFile implements MultipartFile
        MockMultipartFile mockMultipartFile = null;
        try {
        //將本地的文件 轉(zhuǎn)換為輸出流 進(jìn)行 轉(zhuǎn)格式
            FileInputStream inputStream = new FileInputStream(file);
       //通過 MockMultipartFile 帶參構(gòu)造進(jìn)行 創(chuàng)建對象 及賦值
            mockMultipartFile = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(),
                    inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

總結(jié)

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

相關(guān)文章

  • Java語言實(shí)現(xiàn)最大堆代碼示例

    Java語言實(shí)現(xiàn)最大堆代碼示例

    這篇文章主要介紹了Java語言實(shí)現(xiàn)最大堆代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • mac系統(tǒng)啟動(dòng)spring項(xiàng)目報(bào)錯(cuò)的問題及解決方案

    mac系統(tǒng)啟動(dòng)spring項(xiàng)目報(bào)錯(cuò)的問題及解決方案

    這篇文章主要介紹了mac系統(tǒng)啟動(dòng)spring項(xiàng)目報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • Java有序的Map LinkedHashMap用法詳解

    Java有序的Map LinkedHashMap用法詳解

    LinkedHashMap是Java提供的一個(gè)集合類,它繼承自HashMap,并在HashMap基礎(chǔ)上維護(hù)一條雙向鏈表,本文給大家介紹java 有序的Map LinkedHashMap簡介,感興趣的朋友一起看看吧
    2024-01-01
  • Java串口通信入門

    Java串口通信入門

    串口通信是一種用于在計(jì)算機(jī)和外部設(shè)備之間進(jìn)行數(shù)據(jù)交換的通信方式,本文主要介紹了Java串口通信入門,并提供一個(gè)簡單的示例來演示如何在Java中進(jìn)行串口通信,感興趣的可以了解一下
    2023-11-11
  • Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板)

    Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板)

    這篇文章主要介紹了Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java注解中的@Override最佳實(shí)踐

    Java注解中的@Override最佳實(shí)踐

    文章介紹了Java中的@Override注解,其核心作用是編譯期校驗(yàn)重寫方法的正確性,避免偽重寫,并提升代碼可讀性,文章還討論了@Override的使用場景、常見誤區(qū)以及其底層實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • spring?aop?pointcut?添加多個(gè)execution方式

    spring?aop?pointcut?添加多個(gè)execution方式

    這篇文章主要介紹了spring?aop?pointcut?添加多個(gè)execution方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Mybatis和Mybatis-Plus時(shí)間范圍查詢方式

    Mybatis和Mybatis-Plus時(shí)間范圍查詢方式

    這篇文章主要介紹了Mybatis和Mybatis-Plus時(shí)間范圍查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java實(shí)戰(zhàn)之桌球小游戲

    java實(shí)戰(zhàn)之桌球小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)戰(zhàn)之桌球小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java實(shí)現(xiàn)的數(shù)字簽名算法RSA完整示例

    Java實(shí)現(xiàn)的數(shù)字簽名算法RSA完整示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的數(shù)字簽名算法RSA,結(jié)合完整實(shí)例形式詳細(xì)分析了RSA算法的相關(guān)概念、原理、實(shí)現(xiàn)方法及操作技巧,需要的朋友可以參考下
    2019-09-09

最新評論

攀枝花市| 正阳县| 邳州市| 泸溪县| 西乌珠穆沁旗| 睢宁县| 南岸区| 得荣县| 白朗县| 通榆县| 彰化县| 镇沅| 文安县| 利辛县| 城步| 安丘市| 荃湾区| 华坪县| 阿鲁科尔沁旗| 华宁县| 灵丘县| 衡阳市| 晋城| 南城县| 巴彦县| 凉山| 阳江市| 锡林郭勒盟| 墨江| 华亭县| 石家庄市| 福贡县| 商南县| 咸阳市| 绵竹市| 花莲县| 庐江县| 灵台县| 临洮县| 安仁县| 乌鲁木齐县|