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

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

相关推荐
梦幻通灵5 小时前
Mysql字段判空实用技巧
android·数据库·mysql
利刃大大6 小时前
【SpringBoot】Spring事务 && @Transactional详解 && Spring事务失效问题
spring boot·spring·事务
龘龍龙8 小时前
Python基础(九)
android·开发语言·python
㳺三才人子8 小时前
初探 Spring Framework OncePerRequestFilter
spring boot·spring·junit
gjc5928 小时前
MySQL隐蔽 BUG:组合条件查询无故返回空集?深度排查与规避方案
android·数据库·mysql·bug
这是程序猿8 小时前
基于java的ssm框架学生作业管理系统
java·开发语言·spring boot·spring·学生作业管理系统
梨落秋霜9 小时前
Python入门篇【元组】
android·数据库·python
zh_xuan9 小时前
kotlin定义函数和变量
android·开发语言·kotlin
源码获取_wx:Fegn08959 小时前
基于springboot + vue小区人脸识别门禁系统
java·开发语言·vue.js·spring boot·后端·spring
Digitally10 小时前
Android 上的联系人备份和恢复:5 种可靠且方便的方法
android