MultipartFile 和 File的相互转化

1:MultipartFile 转成File

public static File multipartFileToFile(MultipartFile file )  {

        File toFile = null;
        try{
                if(file==null||file.equals("")||file.getSize()<=0){
                    file = null;
                }else {
                        InputStream ins = file.getInputStream();        //获取MultipartFile的输入流               
                        String filePath =  file.getOriginalFilename();
                        filePath = filePath.substring(filePath.lastIndexOf("/")+1);
                        toFile = new File(filePath);                            //根据老文件名创建一个File对象

                        OutputStream os = new FileOutputStream(file);//根据File创建一个输出流
                        int bytesRead = 0;
                        byte[] buffer = new byte[8192];
                        while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                              os.write(buffer, 0, bytesRead);              //将输入流写到输出流中
                        }

                        ins.close();

                        os.close();

                }
        }catch(Exception e){
            //这里进行异常处理
        }        
        return   toFile;

   } 

理解:首先以MultipartFile的名字创建一个File对象,然后以MultipartFile为输入流的源头,以新File对象为输出流的目的地,最后进行流的读写即可。

2:File 转成 MultipartFile

(1):

public static MultipartFile fileToMultipartFile( File file )   {

      FileInputStream fileInput = new FileInputStream(file);
      MultipartFile toMultipartFile = new MockMultipartFile("file",file.getName(),"text/plain", IOUtils.toByteArray(fileInput));
      return toMultipartFile;

理解:以File为输入流的源头,然后将其转成字节数组,最终以字节数组创建MultipartFile。

(2):

public static MultipartFile fileToMultipartFile( File file )   {
        FileItem fileItem = createFileItem(file);                               //根据File创建FileItem
        MultipartFile mfile = new CommonsMultipartFile(fileItem);//根据FileItem创建MultipartFile
        return mfile;

}     

private static FileItem createFileItem(File file){
        FileItemFactory factory = (FileItemFactory) new DiskFileItemFactory();
        String textFieldName = "textField";
        int num = file.getName().lastIndexOf(".");
        String extFile = file.getName().substring(num);
        FileItem item = factory.createItem(textFieldName, "text/plain", true,"MyFileName" + extFile);//根据File名创建一个FileItem
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try {
            FileInputStream fis = new FileInputStream(file);                //以File为源头创建输入流
            OutputStream os = item.getOutputStream();                     //以FileItem为目的地创建输出流
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1){
                os.write(buffer, 0, bytesRead);                                       //将输入流写入输出流
            }
            os.close();
            fis.close();
        }catch (IOException e){
            //异常处理
        }
        return item;
    } 

   理解:将File转换成FileItem,最后以FileItem创建MultipartFile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值