把File轉化為MultipartFile過程記錄
阿新 • • 發佈:2020-10-18
大家都知道在做檔案上傳的時候,後端直接用MultipartFile類接收就行了,那麼為什麼還要考慮把File轉化為MultipartFile呢?我偶然在測試Excel匯入的時候用到了,直接用Junit測試,Excel檔案放在工程中,這就需要把本地檔案轉為File,再轉為MultipartFile。當然僅僅為了測試一個Excel檔案匯入完全不必這樣。哈哈,沒錯,我就是閒的。下面是過程。
引入以下依賴:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
下面是具體程式碼:
package com.leiyuke.file.excel.one; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; public class FileUtil { public MultipartFile fileToMultipartFile(File file) { FileItem fileItem = createFileItem(file); MultipartFile multipartFile = newCommonsMultipartFile(fileItem); return multipartFile; } private static FileItem createFileItem(File file) { FileItemFactory factory = new DiskFileItemFactory(16, null); FileItem item = factory.createItem("textField", "text/plain", true, file.getName()); int bytesRead = 0; byte[] buffer = new byte[8192]; try { FileInputStream fis = new FileInputStream(file); OutputStream os = item.getOutputStream(); while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } return item; } }
注意:匯入的是org.apache.commons下的包,一定記住,我踩過的雷。。。