1. 程式人生 > 實用技巧 >把File轉化為MultipartFile過程記錄

把File轉化為MultipartFile過程記錄

  大家都知道在做檔案上傳的時候,後端直接用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 = new
CommonsMultipartFile(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下的包,一定記住,我踩過的雷。。。