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

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

相关推荐
移动开发者1号3 分钟前
扫一扫的时候会经历哪些事
android·kotlin
移动开发者1号4 分钟前
Fragment事务commit与commitNow区别
android·java
移动开发者1号8 分钟前
动态加载组件原理详解
android·kotlin
移动开发者1号13 分钟前
Android任务栈管理策略总结
android·kotlin
酷爱码14 分钟前
SpringBoot整合Sa-Token实现RBAC权限模型的过程解析
数据库·spring boot·后端
墨狂之逸才2 小时前
kotlin泛型实化
android·kotlin
_一条咸鱼_2 小时前
Android Runtime虚拟机实例创建与全局状态初始化(11)
android·面试·android jetpack
墨狂之逸才2 小时前
kotlin中:: 是一个非常重要的操作符,称为引用操作符
android·kotlin
工业互联网专业3 小时前
基于Android的记录生活APP_springboot+vue
android·vue.js·spring boot·毕业设计·源码·课程设计·记录生活app
小陶来咯3 小时前
【仿muduo库实现并发服务器】实现时间轮定时器
android·运维·服务器