转换方式
需要加入依赖
<!--File转MultipartFile需要test包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.13</version>
</dependency>
package com.hx.utils;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class FileToMultipartFileConverter {
public static MultipartFile convert(File file) throws IOException {
// 检查文件是否存在
if (!file.exists() || !file.isFile()) {
throw new IllegalArgumentException("文件不存在或不是一个文件");
}
// 创建一个 FileInputStream 来读取文件内容
FileInputStream input = new FileInputStream(file);
// 使用 Spring 的 MockMultipartFile 类来创建 MultipartFile 实例
MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", input);
// 关闭 FileInputStream
input.close();
return multipartFile;
}
public static void convert2() {
// 第一种方式:根据文件名称、文件内容转换
// 其中fileName为对方收的文件名
String fileName = "test.txt";
String fileContent = "test content";
MultipartFile multipartFile = new MockMultipartFile(fileName, fileContent.getBytes(StandardCharsets.UTF_8));
}
public static void convert1() throws IOException {
// 第二种方式:文件名称、输入流内容
// 这种方式需要文件的路径
// 其中fileName为对方收的文件名
String fileName = "test.txt";
String filePath = "D:/test.txt";
MultipartFile multipartFile = new MockMultipartFile(fileName, new FileInputStream(filePath));
// 这种和上面一样
File file = new File("filePath");
new MockMultipartFile(fileName, new FileInputStream(file));
}
public static File convertMultipartFileToFile(MultipartFile multipartFile) {
File file = new File(multipartFile.getOriginalFilename());
try (OutputStream os = new FileOutputStream(file)) {
InputStream is = multipartFile.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
// read from is to buffer
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
// flush OutputStream to write any buffered data to file
os.flush();
} catch (Exception e) {
// Handle exception
e.printStackTrace();
return null;
}
return file;
}
}