All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kg.component.file.UploadImageUtils Maven / Gradle / Ivy

There is a newer version: 1.1.26
Show newest version
package com.kg.component.file;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.img.Img;
import cn.hutool.core.io.FileUtil;
import com.kg.component.utils.GuidUtils;
import org.springframework.util.Base64Utils;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 图片上传工具类
 *
 * @author ziro
 * @date 2022-07-02 17:44:07
 */
public class UploadImageUtils {

    /**
     * base64转存图片
     *
     * @param base64Data base64数据
     * @param dirName    自定义路径
     * @return 存储文件实体
     */
    public static FileDTO base64ToJpg(String base64Data, String dirName) {
        // 把base64文件,解析成bytes
        byte[] buffer = Base64Utils.decodeFromString(base64Data);
        // 然后保存
        return UploadFileUtils.bufferToFile(buffer, dirName, "jpg");
    }

    /**
     * 图片压缩上传
     *
     * @param request 请求体
     * @param dirName 自定义文件夹
     * @return 上传文件列表
     */
    public static List upload(HttpServletRequest request, String dirName) throws IOException {
        return upload(request, dirName, true);
    }

    /**
     * 图片上传
     *
     * @param request    请求体
     * @param dirName    自定义文件夹
     * @param isCompress 是否进行图片压缩(为true时,图片文件自动压缩,非图片文件不处理)
     * @return 上传文件列表
     */
    public static List upload(HttpServletRequest request, String dirName, boolean isCompress) throws IOException {
        List resultList = new ArrayList<>();
        // 上传文件请求处理
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        multipartRequest.setCharacterEncoding("UTF-8");
        Map fileMap = multipartRequest.getFileMap();
        for (Map.Entry fileInput : fileMap.entrySet()) {
            // 循环处理待上传列表
            String fileInputName = fileInput.getKey();
            List fileList = multipartRequest.getFiles(fileInputName);
            for (MultipartFile multipartFile : fileList) {
                // 上传文件实体
                FileDTO file = new FileDTO();
                String oldFileName = FilePathConfig.removeSpec(multipartFile.getOriginalFilename());
                if (!StringUtils.hasText(oldFileName)) {
                    throw new IOException("上传文件名不正确!请检查");
                }
                // 旧文件名
                file.setFileOldName(oldFileName);

                // 判断文件扩展名
                String extend = FileType.getFileType(multipartFile.getBytes());
                if (!StringUtils.hasText(extend) || FilePathConfig.UPLOAD_FILE_ALLOW_EXTEND.toLowerCase().indexOf(extend) < 0) {
                    throw new IOException("您上传的文件格式不正确!请检查");
                }
                file.setFileExtend(extend);

                // 判断是否图片格式
                if (FilePathConfig.DEFAULT_IMAGE_FILE_EXTEND.toLowerCase().indexOf(extend) < 0) {
                    throw new IOException("您上传的不是图片!请检查");
                }

                // 新文件名
                file.setFileName(GuidUtils.getUuid32() + "." + extend);
                // 文件大小
                file.setFileSize(multipartFile.getSize());

                // 准备保存文件
                String savePath = FilePathConfig.SAVE_PATH
                        + "/" + dirName
                        + "/" + DateUtil.format(new Date(), "yyyyMMdd")
                        + "/" + file.getFileName();
                File saveFile = new File(savePath.replaceAll("//", "/"));
                FileUtil.mkParentDirs(saveFile);
                if (isCompress && !"gif".equalsIgnoreCase(extend)) {
                    // 压缩
                    Img.from(multipartFile.getInputStream())
                            .setQuality(0.6)// 压缩比率60%
                            .write(FileUtil.getOutputStream(saveFile));
                } else {
                    // 不压缩直接复制
                    FileCopyUtils.copy(multipartFile.getBytes(), saveFile);
                }
                // 文件访问地址
                file.setFileUrl(FilePathConfig.switchUrl(savePath));
                resultList.add(file);
            }
        }
        return resultList;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy