springboot 上传图片 转存成webp

第一步先引入包

bash 复制代码
   <!-- webp-imageio 依赖 -->
        <dependency>
            <groupId>org.sejda.imageio</groupId>
            <artifactId>webp-imageio</artifactId>
            <version>0.1.6</version>
        </dependency>

下面就是上传的时候处理的了

bash 复制代码
 /**
     * 通用上传请求(单个)
     */
    @PostMapping("/upload")
    public AjaxResult uploadFile(MultipartFile file) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file);
            String url = serverConfig.getUrl() + fileName;
            AjaxResult ajax = AjaxResult.success();
            ajax.put("url", url);
            ajax.put("fileName", fileName);
            ajax.put("newFileName", FileUtils.getName(fileName));
            ajax.put("originalFilename", file.getOriginalFilename());
            return ajax;
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

下面是 uploadPath 里面的方法了

bash 复制代码
  /**
     * 根据文件路径上传
     *
     * @param baseDir 相对应用的基目录
     * @param file 上传的文件
     * @return 文件名称
     * @throws IOException
     */
    public static final String upload(String baseDir, MultipartFile file) throws IOException
    {
        try
        {
            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
        }
        catch (Exception e)
        {
            throw new IOException(e.getMessage(), e);
        }
    }
bash 复制代码
 /**
     * 文件上传
     *
     * @param baseDir 相对应用的基目录
     * @param file 上传的文件
     * @param allowedExtension 上传文件类型
     * @return 返回上传成功的文件名
     * @throws FileSizeLimitExceededException 如果超出最大大小
     * @throws FileNameLengthLimitExceededException 文件名太长
     * @throws IOException 比如读写文件出错时
     * @throws InvalidExtensionException 文件校验异常
     */
    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
            InvalidExtensionException
    {
        int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
        {
            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
        }

        assertAllowed(file, allowedExtension);

        String extension = getExtension(file);
        boolean isImage = isAllowedExtension(extension, MimeTypeUtils.IMAGE_EXTENSION);

        String fileName = extractFilename(file);
        String newExtension = isImage ? "webp" : extension; // 如果是图片,使用webp格式
        fileName = fileName.substring(0, fileName.lastIndexOf(".")) + "." + newExtension;

        String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
        if (isImage) {
            // 将图片转换为webp格式
            jpg2webp(file, Paths.get(absPath).toString());
        } else {
            // 非图片文件,直接写入
            file.transferTo(Paths.get(absPath));
        }
        return getPathFileName(baseDir, fileName);
    }

    public static void jpg2webp(MultipartFile file, String newfilePath) throws IOException {
        try (InputStream is = file.getInputStream();
             FileImageOutputStream os = new FileImageOutputStream(new File(newfilePath))) {
            BufferedImage image = ImageIO.read(is);
            ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();
            if (writer == null) {
                throw new IOException("No writer found for WebP format");
            }
            WebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());
            writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT);
            writer.setOutput(os);
            writer.write(null, new IIOImage(image, null, null), writeParam);
            writer.dispose();
        } catch (IOException e) {
            throw new IOException("Error converting image to WebP format", e);
        }
    }

我是在若依框架弄的,详细代码可以下载若依然后加入这些代码就可以了

相关推荐
初次攀爬者11 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺11 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
阿巴斯甜16 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker17 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952718 小时前
Andorid Google 登录接入文档
android
Nyarlathotep011318 小时前
SpringBoot Starter的用法以及原理
java·spring boot
黄林晴19 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android