好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java BufferedImage转换为MultipartFile方式

BufferedImage转换为MultipartFile

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

方法一

1.新建ConvertToMultipartFile类实现MultipartFile接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

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();

      }

方法二

引入依赖:

?

1

2

3

4

5

6

< dependency >

     < groupId >org.springframework</ groupId >

     < artifactId >spring-test</ artifactId >

     < version >5.3.2</ version >

     < scope >compile</ scope >

</ dependency >

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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中声明。如下: 

?

1

< bean id = "multipartResolver" class = "org.springframework.web.multipart测试数据mons.CommonsMultipartResolver" />

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

方法一:强转

方法二:

?

1

2

3

CommonsMultipartFile cf = (CommonsMultipartFile)multfile; 

DiskFileItem fi = (DiskFileItem) cf.getFileItem();

File file = fi.getStoreLocation();

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

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

代码如下:

?

1

2

3

4

5

6

7

8

9

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方式的详细内容...

  阅读:25次