Java BufferedImage转换为MultipartFile方式

作者:西凉的悲伤 时间:2022-07-13 10:02:46 

BufferedImage转换为MultipartFile

Java里读取图片或调整图片大小可使用BufferedImage进行操作(参考我另一篇文章Java修改图片大小尺寸),但有时候我们需要将BufferedImage转为MultipartFile进行其他操作可如下转换:

方法一

1.新建ConvertToMultipartFile类实现MultipartFile接口


import org.springframework.web.multipart.MultipartFile;
import java.io.*;
public class ConvertToMultipartFile implements MultipartFile {
   private byte[] fileBytes;
   String name;
   String originalFilename;
   String contentType;
   boolean isEmpty;
   long size;
   public ConvertToMultipartFile(byte[] fileBytes, String name, String originalFilename, String contentType,
                         long size) {
       this.fileBytes = fileBytes;
       this.name = name;
       this.originalFilename = originalFilename;
       this.contentType = contentType;
       this.size = size;
       this.isEmpty = false;
   }
   @Override
   public String getName() {
       return name;
   }
   @Override
   public String getOriginalFilename() {
       return originalFilename;
   }
   @Override
   public String getContentType() {
       return contentType;
   }
   @Override
   public boolean isEmpty() {
       return isEmpty;
   }
   @Override
   public long getSize() {
       return size;
   }
   @Override
   public byte[] getBytes() throws IOException {
       return fileBytes;
   }
   @Override
   public InputStream getInputStream() throws IOException {
       return new ByteArrayInputStream(fileBytes);
   }
   @Override
   public void transferTo(File dest) throws IOException, IllegalStateException {
       new FileOutputStream(dest).write(fileBytes);
   }
}

2.BufferedImage 转换为 MultipartFile

BufferedImage 先转为byte[ ],再通过上面的ConvertToMultipartFile类转为MultipartFile


try {
           //读取图片转换为 BufferedImage
           BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));
           //BufferedImage 转化为 ByteArrayOutputStream
           ByteArrayOutputStream out = new ByteArrayOutputStream();
           ImageIO.write(image, "jpg", out);
           //ByteArrayOutputStream 转化为 byte[]
           byte[] imageByte = out.toByteArray();
           //将 byte[] 转为 MultipartFile
           MultipartFile multipartFile = new ConvertToMultipartFile(imageByte, "newNamepic", "pic1", "jpg", imageByte.length);
     } catch (IOException e) {
           e.printStackTrace();
     }

方法二

引入依赖:


   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
       <version>5.3.2</version>
       <scope>compile</scope>
   </dependency>

try {
   //读取图片转换为 BufferedImage
           BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));
           //调整图片大小后的BufferedImage。resizeImage方法是调整图片大小的可参考文章开头我上一篇文章
           BufferedImage newImage = ImageUtils.resizeImage(image, 200, 200);
           //将newImage写入字节数组输出流
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
           ImageIO.write( newImage, "jpg", baos );

//转换为MultipartFile
           MultipartFile multipartFile = new MockMultipartFile("pic1.jpg", baos.toByteArray());
      } catch (IOException e) {
           e.printStackTrace();
      }

Java数据转存的中MultipartFile转File

错误背景

由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为File 然后传输。(Spring MVC)

通过搜索引擎 找到了以下两种方法

均要在先spring xml中声明。如下:


<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

如需添加最大,最小等范围控制,请自行百度参考。

方法一:强转

方法二:


CommonsMultipartFile cf = (CommonsMultipartFile)multfile;  
DiskFileItem fi = (DiskFileItem) cf.getFileItem();
File file = fi.getStoreLocation();

亲测有效。但是后期发现设置的问题 导致文件转换中错误,文件不可读从而导致 程序抛出 is not a normal file 异常。

因为错误出现的随机性很大,所以选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。

代码如下:


File f = null;
try {
   f=File.createTempFile("tmp", null);
   file.transferTo(f);<br> f.deleteOnExit();        
} catch (HttpException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}

亲测有效。

来源:https://blog.csdn.net/qq_33697094/article/details/114357533

标签:Java,BufferedImage,MultipartFile
0
投稿

猜你喜欢

  • android实现动态显示隐藏进度条

    2023-04-12 23:07:10
  • java 高并发中volatile的实现原理

    2022-11-24 19:58:22
  • Hibernate三种状态和Session常用的方法

    2021-11-28 15:04:43
  • Feign调用中的两种Header传参方式小结

    2022-10-25 02:47:17
  • 浅析Bean Searcher 与 MyBatis Plus 区别介绍

    2022-08-28 03:25:41
  • Android多渠道打包时获取当前渠道的方法

    2021-06-18 18:10:25
  • SpringBoot参数校验与国际化使用教程

    2021-11-13 15:52:21
  • 详解Android运行时权限及APP适配方法

    2021-06-15 11:06:17
  • Mybatis MapperScannerConfigurer自动扫描Mapper接口生成代理注入到Spring的方法

    2023-04-17 11:57:25
  • Android PopupWindow增加半透明蒙层

    2021-12-30 04:12:09
  • java实现省市区转换成树形结构

    2022-11-27 03:43:37
  • Java查找不重复无序数组中是否存在两个数字的和为某个值

    2023-08-22 16:44:40
  • Intelli IDEA安装Scala插件并安装Scala软件和配置环境变量的详细教程

    2023-02-16 23:49:01
  • 完美解决java读取大文件内存溢出的问题

    2023-07-31 17:53:17
  • C#中函数的创建和闭包的理解

    2022-08-17 01:14:35
  • java源码解析之String类的compareTo(String otherString)方法

    2023-11-11 23:10:00
  • Android 数据库文件存取至储存卡的方法

    2023-05-08 19:12:14
  • 源码解析JDK 1.8 中的 Map.merge()

    2023-11-16 23:49:25
  • android横竖屏切换不重启activity解决方案

    2022-09-04 06:57:56
  • Android中解决WebView上下滑动监听问题

    2022-04-18 04:45:37
  • asp之家 软件编程 m.aspxhome.com