| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package com.ymwk.icvp.signature.controller;
- import com.ymwk.icvp.component.PageParam;
- import com.ymwk.icvp.component.PageResult;
- import com.ymwk.icvp.component.ResponseDTO;
- import com.ymwk.icvp.signature.entity.Picture;
- import com.ymwk.icvp.signature.mapper.PictureMapper;
- import com.ymwk.icvp.signature.model.PictureGenerateRequest;
- import com.ymwk.icvp.signature.model.PictureListRequest;
- import com.ymwk.icvp.signature.service.PictureService;
- import com.ymwk.icvp.signature.service.impl.SealGenerateService;
- import com.ymwk.icvp.utils.MinioClientService;
- import com.ymwk.icvp.utils.MinioConfig;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.mock.web.MockMultipartFile;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @RestController
- @RequestMapping("/api/v1/pictures")
- public class PictureController {
- @Autowired
- private PictureService pictureService;
- @Autowired
- private PictureMapper pictureMapper;
- @Autowired
- private SealGenerateService sealGenerateService;
- @Autowired
- private MinioClientService minioClientService;
- @Autowired
- private MinioConfig minioConfig;
- //印模列表
- @PostMapping("/list")
- public ResponseDTO<PageResult<Picture>> getPictureList(@RequestBody PictureListRequest pictureListRequest) {
- return pictureService.getPictureList(pictureListRequest);
- }
- //生成印模图片并上传到MinIO
- @ResponseBody
- @RequestMapping("/generate")
- public ResponseDTO<Map<String, String>> generateSeal(
- @RequestBody PictureGenerateRequest request
- ) throws Exception {
- // 1. 生成图片
- BufferedImage image = sealGenerateService.generate(request);
- // 2. 将BufferedImage转换为MultipartFile
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ImageIO.write(image, "png", baos);
- baos.flush();
- byte[] imageBytes = baos.toByteArray();
- baos.close();
- // 创建MultipartFile对象
- MultipartFile multipartFile = new MockMultipartFile(
- "seal.png",
- "seal.png",
- "image/png",
- imageBytes
- );
- // 3. 上传到MinIO
- String fileName = minioClientService.uploadFile(multipartFile);
- // 4. 生成下载链接
- String downloadUrl = minioConfig.getEndpoint() + "/" +
- minioConfig.getBucketName() + "/" +
- fileName;
- Picture picture = new Picture();
- picture.setName(request.getName() != null && !request.getName().isEmpty()
- ? request.getName() : fileName);
- picture.setUrl(downloadUrl);
- picture.setCreateTime(new Date());
- pictureMapper.insert(picture); // 或 pictureService.save(picture)
- // 5. 返回下载链接
- Map<String, String> response = new HashMap<>();
- response.put("downloadUrl", downloadUrl);
- return ResponseDTO.ok(response);
- }
- //下载印模图片
- //TODO 下载出来0kb的空文件
- @GetMapping("/download")
- public void downloadSeal(@RequestParam String fileName, HttpServletResponse response) {
- try (InputStream is = minioClientService.downloadFile(fileName);
- OutputStream os = response.getOutputStream()) {
- response.setContentType("application/octet-stream");
- response.setHeader("Content-Disposition",
- "attachment; filename=\"" + URLEncoder.encode(fileName, StandardCharsets.UTF_8) + "\"");
- byte[] buffer = new byte[8192];
- int len;
- while ((len = is.read(buffer)) != -1) {
- os.write(buffer, 0, len);
- }
- os.flush();
- } catch (Exception e) {
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- }
- }
- //删除印模图片
- @PostMapping("/delete")
- public ResponseDTO<String> deleteSeal(@RequestParam Integer id) {
- return pictureService.deletePicture(id);
- }
- }
|