Java BufferedImage转换为MultipartFile方式

目录
  • BufferedImage转换为MultipartFile
    • 方法一
    • 方法二
  • Java数据转存的中MultipartFile转File
    • 错误背景
    • 通过搜索引擎 找到了以下两种方法

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

亲测有效。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中将File转化为MultipartFile的操作

    话不多说直接上代码,简单明了 import java.io.File; import java.io.FileInputStream; import org.springframework.web.multipart.MultipartFile; import org.springframework.mock.web.MockMultipartFile; import org.apache.http.entity.ContentType; File pdfFile = new File("D:/

  • SpringMVC 上传文件 MultipartFile 转为 File的方法

    在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文件 此方法会在本地产生临时文件,使用完毕需要删除 在网上搜索未发现可直接使用的不产生临时文件的方法,查到几个本地测试皆无法通过,如哪位有不产生临时文件的方法,请多多指教

  • Java利用MultipartFile实现上传多份文件的代码

    配置文件 <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <prop

  • 详解SpringMVC使用MultipartFile实现文件的上传

    如果需要实现跨服务器上传文件,就是将我们本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传.这里是结合SpringMVC+ftp的形式上传的.我们需要先懂得如何配置springMVC,然后在配置ftp,最后再结合MultipartFile上传文件. springMVC上传需要几个关键jar包,spring以及关联包可以自己配置,这里主要说明关键的jar包 1:spring-web-3.2.9.RELEASE.jar (spring的关键jar包,版本可以自己选择) 2:commons-

  • Java BufferedImage转换为MultipartFile方式

    目录 BufferedImage转换为MultipartFile 方法一 方法二 Java数据转存的中MultipartFile转File 错误背景 通过搜索引擎 找到了以下两种方法 BufferedImage转换为MultipartFile Java里读取图片或调整图片大小可使用BufferedImage进行操作(参考我另一篇文章Java修改图片大小尺寸),但有时候我们需要将BufferedImage转为MultipartFile进行其他操作可如下转换: 方法一 1.新建ConvertToMu

  • java 中DH的方式实现非对称加密的实例

    java 中DH的方式实现非对称加密的实例 实现代码: package com.sahadev; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.X509Enco

  • java累加和校验实现方式16进制(推荐)

    已知一个字符串,求该字符串的16进制累加和,已知一段字符串和校验码,校验和累加是否合法,话不多说了直接上代码 public static String makeChecksum(String data) { if (data == null || data.equals("")) { return ""; } int total = 0; int len = data.length(); int num = 0; while (num < len) { Str

  • java通过模拟post方式提交表单实现图片上传功能实例

    本文实例讲述了java通过模拟post方式提交表单实现图片上传功能.分享给大家供大家参考,具体如下: 模拟表单html如下: <form action="up_result.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> <label> <input type="tex

  • java 中RSA的方式实现非对称加密的实例

    java 中RSA的方式实现非对称加密的实例 RSA通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密:同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证. 实现代码: package com.sahadev; import java.security.KeyFactory; import java.security.KeyPair; import java.se

  • 详解java中通过post方式访问后台服务器

    最近在学习java中通过post方式访问后台服务器,那么今天也算个学习笔记吧! 首先,上代码: Runnable payRunnable = new Runnable() { @Override public void run() { try { HashMap<String, String> payParamMap = new HashMap<String, String>(); payParamMap.put("canshu" ,"woshican

  • Java中map遍历方式的选择问题详解

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k

  • Java中5种方式实现String反转

    这里介绍Java中5中实现String反转的方式. 一.数组实现String反转 //数组实现String反转 public String reverseByArray(){ if(str == null || str.length() == 1){ return null; } char[] ch = str.toCharArray();//字符串转换成字符数组 for(int i = 0 ; i < ch.length/2 ; i++){ char temp = ch[i]; ch[i] =

  • HDFS的Java API的访问方式实例代码

    本文研究的主要是HDFS的Java API的访问方式,具体代码如下所示,有详细注释. 最近的节奏有点儿快,等有空的时候把这个封装一下 实现代码 要导入的包: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation

  • Java多线程实现Runnable方式

    本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下 (一)步骤 1.定义实现Runnable接口 2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中. 3.通过Thread类建立线程对象. 4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数. 为什么要讲Runnable接口的子类对象传递给Thread的构造方法.因为自定义的方法的所属的对象是Runnable接口的子类对象. 5.调用Thread类的

随机推荐