第一步先引入包
<!-- webp-imageio 依赖 --><dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version></dependency>
下面就是上传的时候处理的了
/*** 通用上传请求(单个)*/@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 里面的方法了
/*** 根据文件路径上传** @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);}}
/*** 文件上传** @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);}}
我是在若依框架弄的,详细代码可以下载若依然后加入这些代码就可以了