package cc.mrbird.febs.dapp.controller; import cc.mrbird.febs.common.annotation.ControllerEndpoint; import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsResponse; import cn.hutool.core.lang.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.coobird.thumbnailator.Thumbnails; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.FileCopyUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.util.HashMap; import java.util.Map; @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping(value = "/admin/goods") public class AdminMallGoodsController extends BaseController { /** * 通用上传请求 */ @Value("${static.resource.url}") private String resourceUrl; @Value("${static.resource.path}") private String resourcePath; @PostMapping("/uploadFileBase64") @ControllerEndpoint(operation = "图片上传", exceptionMessage = "上传失败") public Map upload(MultipartFile file) throws IOException { if (file == null) { return new FebsResponse().message("上传文件为空"); } // 文件保存目录路径 String savePath = resourcePath; // 文件保存目录URL String saveUrl = resourceUrl; // 检查目录 File uploadDir = new File(savePath); if (!uploadDir.isDirectory()) { uploadDir.mkdir(); } // 获得文件的后缀 String fileName = file.getOriginalFilename(); String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); String newFileName = UUID.randomUUID().toString() + "." + fileExt; if (isImage(file.getInputStream())) { Thumbnails.of(file.getInputStream()) // 图片大小(长宽)压缩比例 从0-1,1表示原图 .scale(1f) // 图片质量压缩比例 从0-1,越接近1质量越好 .outputQuality(0.9f) .toOutputStream(new FileOutputStream(savePath + newFileName)); } else { File uploadedFile = new File(savePath, newFileName); try { //存文件 FileCopyUtils.copy(file.getBytes(), uploadedFile); } catch (IOException e) { e.printStackTrace(); } } String visitPath = (saveUrl + newFileName); Map map = new HashMap(); Map map2 = new HashMap(); map.put("code",0);//0表示成功,1失败 map.put("msg","上传成功");//提示消息 map.put("data",map2); map2.put("src",visitPath);//图片url map2.put("title",fileName);//图片名称,这个会显示在输入框里 return map; } private boolean isImage(InputStream inputStream) { BufferedImage read = null; try { read = ImageIO.read(inputStream); } catch (IOException e) { return false; } return read != null; } }