MultipartFile 互转 File

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.io.IOUtils;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

/**
 * MultipartFile 互转 File
 * 本地环境是可以的 原因是因为有spring-test这个包。
 * 然而项目发布后发现项目启动不了一直报错找不到MockMultipartFile,原因是发布正式版时、根本不会打测试包。所以找不到。
 * 还有就是MockMultipartFile这个东西是单元测试使用的,尽量不要使用这个。
 * @author 45982
 *
 */
public class Snippet {
	/**
	 * MultipartFile 转 File
	 * @param file
	 * @throws Exception
	 */
	public static File multipartFileToFile( @RequestParam MultipartFile file ) throws Exception {
	
	    File toFile = null;
	    if(file.equals("")||file.getSize()<=0){
	        file = null;
	    }else {
	            InputStream ins = null;
	            ins = file.getInputStream();
	            toFile = new File(file.getOriginalFilename());
	            inputStreamToFile(ins, toFile);
	            ins.close();
	    }
		return toFile;
	
	}
	
	/**
	 * File 转 MultipartFile
	 * @param file
	 * @throws Exception
	 */
	public static void fileToMultipartFile( File file ) throws Exception {
	
	    FileInputStream fileInput = new FileInputStream(file);
	    MultipartFile toMultipartFile = new MockMultipartFile("file",file.getName(),"text/plain", IOUtils.toByteArray(fileInput));
	    toMultipartFile.getInputStream();
	
	}
	
	
	public static void inputStreamToFile(InputStream ins, File file) {
	    try {
	        OutputStream os = new FileOutputStream(file);
	        int bytesRead = 0;
	        byte[] buffer = new byte[8192];
	        while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
	            os.write(buffer, 0, bytesRead);
	        }
	        os.close();
	        ins.close();
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值