10萬+IT人都在關注的IT技術博客,實用的技術乾貨持續更新......
通常從界面上傳的文件,後臺接口都用MultipartFile格式的文件流接收,如果要直接對物理磁盤目錄裏的文件進行操作,則只能實用File流進行操作,有時由於一些定製化的需求,需要對File流和MultipartFile流轉換,筆者分享一個已經完美實現的轉換工具類,如果覺得對您有幫助,敬請點贊並分享給更多需要的人,廢話不多說,直接上代碼:
package com.demo.utils;
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;
/**
* 創建時間:2019年3月8日 下午4:25:55
* 項目名稱:shsc-batchUpload-server
* 類說明:File流轉爲MultipartFile流
* @author guobinhui
* @since JDK 1.8.0_51
*/
public class FileCovertUtils {
public static void main(String[] args) {
try {
String picPath = "D:/originalfile/10001.png";
File f = new File(picPath);
MultipartFile file = getMulFileByFile(f);
System.out.println(file.getOriginalFilename());
} catch(Exception e) {
e.printStackTrace();
}
}
public static MultipartFile getMulFileByFile(File file) {
FileItem fileItem = createFileItem(file.getPath(),file.getName());
MultipartFile mfile = new CommonsMultipartFile(fileItem);
return mfile;
}
public static FileItem createFileItem(String filePath,String fileName){
String fieldName = "file";
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem item = factory.createItem(fieldName, "text/plain", false,fileName);
File newfile = new File(filePath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
try
{
FileInputStream fis = new FileInputStream(newfile);
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;
}
}
更多JavaEE資料請關注下面公衆號,歡迎廣大開發者朋友一起交流。筆者電話(微信):18629374628