成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 文件處理:MultipartFile 與 File 互轉(zhuǎn)

開發(fā) 前端
在文件上傳功能中,接收客戶端上傳的MultipartFile后,將其轉(zhuǎn)換為File保存到服務器本地,方便后續(xù)的存儲和管理,如圖片上傳、文檔上傳等。

前言

在Java Web開發(fā)中,MultipartFile和File是處理文件相關操作的重要類。

  • MultipartFile主要用于接收客戶端上傳的文件,它封裝了文件的相關信息和內(nèi)容;
  • File則代表本地文件系統(tǒng)中的文件或目錄,用于對文件進行讀寫、刪除等操作。

在實際項目中,常常需要在MultipartFile和File之間進行轉(zhuǎn)換,本文將詳細介紹它們之間互轉(zhuǎn)的原理、方法及應用場景。

MultipartFile 和 File 概述

MultipartFile

MultipartFile是Spring框架中定義的一個接口,位于org.springframework.web.multipart包下。當客戶端通過HTTP協(xié)議以multipart/form-data格式上傳文件時,Spring MVC會自動將上傳的文件封裝為MultipartFile對象。

該接口提供了一系列方法來獲取文件的相關信息,如文件名getOriginalFilename()、文件大小getSize()、文件內(nèi)容流getInputStream()等,同時也提供了將文件保存到本地的方法transferTo(File dest)。

public class MultipartFileExample {
    public static void main(String[] args) {
        // 假設這里獲取到了一個MultipartFile對象
        MultipartFile multipartFile = null;
        try {
            System.out.println("文件名: " + multipartFile.getOriginalFilename());
            System.out.println("文件大小: " + multipartFile.getSize() + " 字節(jié)");
            // 可以通過getInputStream()獲取文件內(nèi)容流進行進一步處理
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

File

File是Java標準庫java.io包中的一個類,用于表示文件系統(tǒng)中的文件或目錄。它提供了豐富的方法來操作文件和目錄,如創(chuàng)建文件createNewFile()、刪除文件delete()、判斷文件是否存在exists()、獲取文件絕對路徑getAbsolutePath()等。File對象既可以指向?qū)嶋H存在的文件或目錄,也可以用于創(chuàng)建新的文件路徑。

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

public class FileExample {
    public static void main(String[] args) {
        File file = new File("test.txt");
        try {
            if (file.createNewFile()) {
                System.out.println("文件創(chuàng)建成功");
            } else {
                System.out.println("文件已存在");
            }
            System.out.println("文件絕對路徑: " + file.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

MultipartFile 轉(zhuǎn) File

將MultipartFile轉(zhuǎn)換為File,通常是為了將上傳的文件保存到本地文件系統(tǒng)中,以便后續(xù)進行其他操作,如文件處理、存儲備份等。

使用 transferTo 方法

public class MultipartFileToFile {
    public static File multipartFileToFile(MultipartFile multipartFile) throws IOException {
        // 創(chuàng)建臨時文件
        File file = File.createTempFile("temp", null);
        try {
            // 將MultipartFile的內(nèi)容寫入臨時文件
            multipartFile.transferTo(file);
            return file;
        } catch (IOException e) {
            // 寫入失敗時刪除臨時文件
            file.delete();
            throw e;
        }
    }
}

通過流操作

public class MultipartFileToFileByStream {
    public static File multipartFileToFileByStream(MultipartFile multipartFile) throws IOException {
        File file = new File(multipartFile.getOriginalFilename());
        try (InputStream inputStream = multipartFile.getInputStream();
             OutputStream outputStream = new FileOutputStream(file)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, length);
            }
        }
        return file;
    }
}

File 轉(zhuǎn) MultipartFile

使用 MockMultipartFile

public class FileToMultipartFileInTest {
    public static MultipartFile fileToMultipartFileInTest(File file) throws IOException {
        try (FileInputStream inputStream = new FileInputStream(file)) {
            return new MockMultipartFile(file.getName(), file.getName(), null, inputStream);
        }
    }
}

自定義 MultipartFile 實現(xiàn)類

public class CustomMultipartFile implements MultipartFile {
    private final File file;

    public CustomMultipartFile(File file) {
        this.file = file;
    }

    @Override
    public String getName() {
        return file.getName();
    }

    @Override
    public String getOriginalFilename() {
        return file.getName();
    }

    @Override
    public String getContentType() {
        return null;
    }

    @Override
    public boolean isEmpty() {
        return file.length() == 0;
    }

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

    @Override
    public byte[] getBytes() throws IOException {
        try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
             FileInputStream fis = new FileInputStream(file)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) != -1) {
                bos.write(buffer, 0, length);
            }
            return bos.toByteArray();
        }
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new FileInputStream(file);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        try (InputStream is = getInputStream();
             OutputStream os = new FileOutputStream(dest)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) != -1) {
                os.write(buffer, 0, length);
            }
        }
    }
}

應用場景

  • 文件上傳與存儲:在文件上傳功能中,接收客戶端上傳的MultipartFile后,將其轉(zhuǎn)換為File保存到服務器本地,方便后續(xù)的存儲和管理,如圖片上傳、文檔上傳等。
  • 文件處理:對上傳的文件進行處理前,先將MultipartFile轉(zhuǎn)換為File,以便使用Java標準庫中的文件處理相關類和方法,如對文件進行壓縮、加密等操作。
  • 文件轉(zhuǎn)發(fā):將本地文件作為請求參數(shù)發(fā)送到其他服務時,需要將File轉(zhuǎn)換為MultipartFile,以符合文件上傳的請求格式。
責任編輯:武曉燕 來源: 一安未來
相關推薦

2022-03-10 18:46:33

Pythonmp4GIF

2012-03-07 10:04:11

HTML 5

2017-04-25 15:50:02

sparse傳輸處理

2013-03-26 09:04:16

iOS時間戳與時間相互轉(zhuǎn)化

2024-02-22 14:51:38

Java字符串

2023-09-20 10:04:04

Python工具

2022-01-26 15:16:24

utilsOpenHarmon鴻蒙

2010-09-01 08:57:27

jQueryDOM對象

2020-12-18 05:53:57

SQL

2012-06-20 14:16:36

Java內(nèi)存映射

2010-04-01 11:21:51

Oracle備份

2009-09-07 15:21:38

Java與C#事件處理

2023-11-29 13:56:00

數(shù)據(jù)技巧

2023-09-07 09:44:22

Java并發(fā)

2012-05-02 13:22:46

JavaJava設計

2009-06-19 16:12:22

Java語言properties

2017-05-04 16:07:11

Tomcat內(nèi)存泄露

2014-06-26 09:24:04

TCP

2012-03-12 12:34:02

JavaF#

2024-02-21 12:18:00

Java虛擬機JVM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区中文字幕在线观看 | 亚洲精品久久久 | 色综合久久88色综合天天 | 国产精品1 | 久久久高清| 精品视频在线免费观看 | 色婷婷亚洲一区二区三区 | 日韩av在线一区 | 亚洲国产成人精品久久 | 免费观看av网站 | 亚洲第一视频网站 | 夜久久 | 欧美日韩亚洲国产 | 午夜精品久久久 | 欧美一级淫片免费视频黄 | 欧美成年网站 | 欧美激情免费在线 | 欧美精品网站 | 国产99久久精品一区二区永久免费 | 亚洲一区二区三区高清 | 精品欧美一区二区精品久久久 | 拍真实国产伦偷精品 | 日本精品在线一区 | 日本一本视频 | 日本亚洲欧美 | 夜夜骑av| 天天干天天爱天天爽 | 日本不卡免费新一二三区 | 日韩欧美精品 | 欧美在线不卡 | 日本在线视频一区二区 | 亚洲精品在线免费观看视频 | 天天色天天色 | 麻豆精品久久 | 狠狠干影院 | 国产精品爱久久久久久久 | 成人夜晚看av| 视频羞羞 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久综合久久久 | 午夜影院官网 |