java后臺本地文件轉(zhuǎn)為MultipartFile類型的實現(xiàn)方式
java后臺本地文件轉(zhuǎn)為MultipartFile類型
前端上傳文件轉(zhuǎn)為MultipartFile類型,java后臺通過springmvc接收自動轉(zhuǎn)換處理就不用多說了。
現(xiàn)在需要在后臺java代碼里將本地文件轉(zhuǎn)換為MultipartFile類型如何處理呢?
如下代碼
主要利用FileItemFactory創(chuàng)建FileItem,MultipartFile的實現(xiàn)類CommonsMultipartFile構(gòu)造一個對象,將本地讀取的文件流轉(zhuǎn)換為MultipartFile。
getMultipartFiles()和getMultipartFiles()支持一個文件的轉(zhuǎn)換和多個文件的轉(zhuǎn)換。
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
public class MultipartFileTest {
private static final Logger log = LoggerFactory.getLogger(MultipartFileTest.class);
private MultipartFileTest() { }
public static void main(String[] args) {
// 本地文件轉(zhuǎn)為MultipartFile類型
try{
InputStream fis = new FileInputStream("E:\\tool\\20230102word.doc");
MultipartFileTest.getMultipartFile(fis, "20230102word.doc");
}catch (FileNotFoundException e){
log.error("FileNotFoundException exception", e);
throw new RuntimeException("文件不存在");
}
}
public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) {
FileItem fileItem = createFileItem(inputStream, fileName);
return new CommonsMultipartFile(fileItem);
}
public static MultipartFile[] getMultipartFiles(InputStream[] inputStream, String fileName) {
// 多文件轉(zhuǎn)換
int length = inputStream.length;
MultipartFile[] multipartFiles = new MultipartFile[length];
for (int i = 0; i < length; i++) {
FileItem fileItem = createFileItem(inputStream[i], fileName);
multipartFiles[i] = new CommonsMultipartFile(fileItem);
}
return multipartFiles;
}
public static FileItem createFileItem(InputStream inputStream, String fileName) {
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);
int read = 0;
OutputStream os = null;
byte[] buffer = new byte[10 * 1024 * 1024];
try {
os = fileItem.getOutputStream();
while ((read = inputStream.read(buffer, 0, 4096)) != -1) {
os.write(buffer, 0, read);
}
inputStream.close();
} catch (IOException e) {
log.error("os write exception", e);
throw new IllegalArgumentException("文件流輸出失敗");
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
log.error("stream os close exception", e);
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("stream inputStream close exception", e);
}
}
}
return fileItem;
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java double轉(zhuǎn)BigDecimal的注意事項說明
這篇文章主要介紹了Java double轉(zhuǎn)BigDecimal的注意事項說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Mybatis一級緩存和結(jié)合Spring Framework后失效的源碼探究
這篇文章主要介紹了Mybatis一級緩存和結(jié)合Spring Framework后失效的源碼探究,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
tio-boot整合hotswap-classloader實現(xiàn)熱加載方法實例
這篇文章主要為大家介紹了tio-boot整合hotswap-classloader實現(xiàn)熱加載方法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Java獲取resources下文件路徑的幾種方法及遇到的問題
這篇文章主要給大家介紹了關(guān)于Java獲取resources下文件路徑的幾種方法及遇到的問題,在Java開發(fā)中經(jīng)常需要讀取項目中resources目錄下的文件或獲取資源路徑,需要的朋友可以參考下2023-12-12

