java 网络图片压缩、富文本图片提取、获取图片MB大小、图片File按比例压缩并重命名、图片File转MultipartFile对象并上传到接口工具类

业务模型

  1. 已知图片网络图片url(或一段含有图片的富文本)。
  2. 通过图片url加载图片到本地(或者读取富文本中的img属性解析图片url)(使用方法 getFileByNetUrlHttp、getImgStr)。
  3. 获取文件大小并转换为MB(使用formatFileSize)
  4. 如果文件大于一定大小(fileMaxVlue)按照比例(reduce)压缩通过url加载的本地图片,并重命名(方法renameAndReduceFile)。
  5. 图片压缩完成之后转换成MultipartFile并提交到上传接口(uploadPostUrl ),删除压缩后的本地图片(sendMultipartFilePost)。

工具类主要功能

  • 网络图片加载到本地Fille(getFileByNetUrlHttp)
  • 获取文件File大小,并转换为MB单位(formatFileSize)
  • 图片按照比例压缩成新文件File,重命名(renameAndReduceFile)
  • 图片File转换为MultipartFile对象(getMultipartFile)
  • 提交MultipartFile对象到图片上传接口(sendMultipartFilePost)
  • 富文本中提取图片(img标签src属性)(getImgStr)

工具类源码

package com.shipj.test.util;

import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.mock.web.MockMultipartFile;

import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author shipj
 * @version 1.0
 * @Title: ProductpPcturesDealUtil
 * @Description: 图片压缩并接口上传工具类(业务模型,从图片url(从图片url或富文本中包含url)加载图片到本,本地进行压缩图片,压缩完成之后通过接口上传到服务)
 * @date 2021-04-09 16:19
 */
@Slf4j
public class ProductpPcturesDealUtil {

    //压缩比例
    private static float reduce = 0.3f;

    //文件临时目录
    private static String fileDir = "D:\\TEMP\\";

    //上传图片url
    private static String uploadPostUrl = "https://127.0.0.1:8080/test/storage/putFile";

    //上传文件名称
    private static String fileParName = "file";

    //需压缩文件界值
    public static float fileMaxVlue = 5f;

    //img Matcher 对象
    private static Pattern p_image=Pattern.compile("<img.*src\\s*=\\s*(.*?)[^>]*?>",Pattern.CASE_INSENSITIVE);

    //img src Matcher 对象
    private static Pattern r_image=Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)");

    /**
     * @return float
     * @Author shipj
     * @Description 转换文件大小(MB)
     * @Date 10:58 2021-04-09
     * @Param [fileLength] file length
     **/
    public static float formatFileSize(long fileLength) {
        if (fileLength == 0) {
            return 0;
        }
        //运算转换单位(保留2位小数)
        float mbUnit = 1048676;
        float mbValue = ((float) fileLength) / mbUnit;
        //转换单位为MB
        float fileSizeMB = new BigDecimal(mbValue).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
        return fileSizeMB;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spjhandsomeman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值