basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
ÎļþÃû´Ó inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.inspect.controller; package com.ruoyi.basic.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.WorkShopDto; @@ -42,7 +42,7 @@ @ApiOperation(value = "è½¦é´æä»¶ä¸ä¼ ") @PostMapping("/uploadFile") public Result uploadFile(Integer id, MultipartFile file) { public Result uploadFile(Integer id, MultipartFile file)throws Exception { return Result.success(workShopService.uploadFile(id,file)); } @@ -55,6 +55,6 @@ @ApiOperation(value = "å é¤éä»¶") @DeleteMapping("/delFile") public Result<?> delFile(Integer id) { return Result.success(workShopFileService.removeById(id)); return Result.success(workShopFileService.delFile(id)); } } basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
@@ -43,4 +43,7 @@ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("é¢è§å°å") private String fileMinioUrl; } basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
@@ -10,4 +10,5 @@ */ public interface WorkShopFileService extends IService<WorkShopFile> { int delFile(Integer id); } basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
@@ -20,5 +20,5 @@ int delWorkShop(Integer id); int uploadFile(Integer id, MultipartFile file); int uploadFile(Integer id, MultipartFile file) throws Exception; } basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
@@ -5,7 +5,11 @@ import com.ruoyi.basic.mapper.WorkShopFileMapper; import com.ruoyi.basic.pojo.WorkShopFile; import com.ruoyi.basic.service.WorkShopFileService; import com.ruoyi.common.utils.file.MinioUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * @description é对表ãwork_shop_file(车é´éä»¶åç§°)ãçæ°æ®åºæä½Serviceå®ç° @@ -14,6 +18,40 @@ @Service public class WorkShopFileServiceImpl extends ServiceImpl<WorkShopFileMapper, WorkShopFile> implements WorkShopFileService { @Resource private WorkShopFileMapper workShopFileMapper; @Resource private MinioUtils minioUtils; @Value("${minio.bucketName}") private String bucketName; @Override public int delFile(Integer id) { // è¥ id 为空ï¼ç´æ¥è¿å 0ï¼è¡¨ç¤ºæªå é¤ä»»ä½è®°å½ if (id == null) { return 0; } try { // æ¥è¯¢è¦å é¤çæä»¶ä¿¡æ¯ WorkShopFile file = workShopFileMapper.selectById(id); if (file != null && file.getFileUrl() != null) { // æ£æ¥ MinIO 䏿件æ¯å¦åå¨ if (minioUtils.objectExists(bucketName, file.getFileUrl())) { // å å é¤ MinIO ä¸ç对象 minioUtils.removeObjectsResult(bucketName, file.getFileUrl()); } } // æ§è¡æ°æ®åºå é¤æä½ int deleteResult = workShopFileMapper.deleteById(id); return deleteResult; } catch (Exception e) { // å¤çå¼å¸¸ï¼å¯æ ¹æ®å®é æ åµè®°å½æ¥å¿ææåºèªå®ä¹å¼å¸¸ e.printStackTrace(); return 0; } } } basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
@@ -1,6 +1,5 @@ package com.ruoyi.basic.service.impl; import cn.hutool.core.lang.UUID; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,16 +9,16 @@ import com.ruoyi.basic.pojo.WorkShop; import com.ruoyi.basic.pojo.WorkShopFile; import com.ruoyi.basic.service.WorkShopService; import com.ruoyi.common.core.domain.MinioResult; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.file.MinioUtils; import com.ruoyi.framework.exception.ErrorException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * @description é对表ãwork_shop(车é´åç§°)ãçæ°æ®åºæä½Serviceå®ç° @@ -33,11 +32,11 @@ @Resource private WorkShopFileMapper workShopFileMapper; @Value("${wordUrl}") private String wordUrl; @Resource private MinioUtils minioUtils; @Value("${file.path}") private String imgUrl; @Value("${minio.bucketName}") private String bucketName; @Override @@ -60,56 +59,35 @@ } @Override public int uploadFile(Integer id, MultipartFile file) { String username = SecurityUtils.getUsername(); String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); public int uploadFile(Integer id, MultipartFile file) throws Exception { // åºç¡æ ¡éª if (file == null || file.isEmpty()) { throw new ErrorException("ä¸ä¼ æä»¶ä¸ºç©º"); } WorkShopFile workShopFile = new WorkShopFile(); workShopFile.setWorkShopId(id); workShopFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // æ¯å¾ç path = imgUrl; workShopFile.setType(1); } else { // æ¯æä»¶ path = wordUrl; workShopFile.setType(2); } workShopFile.setFileName(file.getOriginalFilename()); workShopFile.setName(SecurityUtils.getUsername()); try { // 1. è§£æç»å¯¹è·¯å¾ï¼ä¼å 使ç¨é ç½®çç»å¯¹è·¯å¾ï¼å¦ååºäºé¡¹ç®æ ¹ç®å½ï¼ String basePath = imgUrl.startsWith(File.separator) ? imgUrl : System.getProperty("user.dir") + File.separator + imgUrl; File realpath = new File(basePath); // 2. å建ç®å½ï¼è®°å½æ¥å¿ï¼æ£æ¥æ¯å¦æåï¼ if (!realpath.exists()) { if (!realpath.mkdirs()) { System.err.println("ç®å½å建失败ï¼{}"); return 0; String contentType = file.getContentType(); String category = contentType != null && contentType.startsWith("image/") ? "images" : "docs"; MinioResult upload = minioUtils.upload(bucketName, file, true); // è®°å½åå¨è·¯å¾ workShopFile.setFileUrl(upload.getBucketFileName()); workShopFile.setFileMinioUrl(upload.getPreviewExpiry()); workShopFile.setType(category.equals("images") ? 1 : 2); // æ°æ®åºæä½ int insertResult = workShopFileMapper.insert(workShopFile); if (insertResult <= 0) { throw new ErrorException("æ°æ®åºæå ¥å¤±è´¥"); } } // 3. çæå¯ä¸æä»¶å String uuid = UUID.randomUUID().toString().replace("-", ""); String suffix = filename.substring(filename.lastIndexOf(".")); pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "_" + uuid + suffix; File targetFile = new File(realpath, pathName); // 4. ä¿åæä»¶ file.transferTo(targetFile); workShopFile.setFileUrl(pathName); workShopFile.setName(username); return workShopFileMapper.insert(workShopFile); return insertResult; } catch (Exception e) { e.printStackTrace(); System.err.println("éä»¶ä¸ä¼ é误"); return 0; throw new Exception("ç³»ç»å¼å¸¸: ", e); } } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -1,9 +1,13 @@ package com.ruoyi.web.controller.common; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.utils.file.MinioUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -28,14 +32,16 @@ */ @RestController @RequestMapping("/common") public class CommonController { public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @Autowired private ServerConfig serverConfig; private static final String FILE_DELIMETER = ","; @Resource private MinioUtils minioUtils; /** * éç¨ä¸è½½è¯·æ± @@ -160,4 +166,37 @@ log.error("ä¸è½½æä»¶å¤±è´¥", e); } } /** * éç¨æä»¶ä¸è½½æ¹æ³ * * @param fileUrl Minioä¸çæä»¶è·¯å¾ï¼å¦ï¼images/2023/report.pdfï¼ * @param fileName ä¸è½½æ¶æ¾ç¤ºçæä»¶åï¼å¦ï¼å¹´åº¦æ¥å.pdfï¼ * @param response HttpServletResponse对象 */ @GetMapping("/downloadMinio") public void downloadFile(String fileUrl, String fileName, HttpServletResponse response) { Logger logger = LoggerFactory.getLogger(this.getClass()); if (StringUtils.isBlank(fileUrl) || StringUtils.isBlank(fileName)) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); try (PrintWriter writer = response.getWriter()) { writer.write("æä»¶è·¯å¾åæä»¶åä¸è½ä¸ºç©º"); } catch (IOException e) { logger.error("设置ååºä¿¡æ¯åºé", e); } return; } String bucketName = "radio-frequency"; try { minioUtils.download(bucketName, fileUrl, fileName, response); } catch (Exception e) { logger.error("æä»¶ä¸è½½å¤±è´¥", e); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); try (PrintWriter writer = response.getWriter()) { writer.write("æä»¶ä¸è½½å¤±è´¥: " + e.getMessage()); } catch (IOException ioException) { logger.error("设置ååºä¿¡æ¯åºé", ioException); } } } } ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,4 +1,4 @@ # æ¬å° # è£ å¤æ£å¼åº # æ°æ®æºé ç½® spring: @@ -111,12 +111,13 @@ org.springframework: warn minio: endpoint: http://114.132.189.42/ port: 7019 endpoint: http://114.132.189.42:7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ bucketName: radio-frequency publicUrl: # ç §çåå¨è·¯å¾+++++++++++++++++++++++++++è¿ç»´éè¦é ç½®+++++++++++++++++++++++++++ file: ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
@@ -13,14 +13,13 @@ @Data public class MinioConfig { private String endpoint; private int port; private String accessKey; private String secretKey; private Boolean secure; @Bean public MinioClient getMinioClient() { return MinioClient.builder().endpoint(endpoint, port, secure) return MinioClient.builder().endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
@@ -167,7 +167,7 @@ minioResult.setBucketFileName(bucketFilePath); // è¿åæ°¸ä¹ é¢è§å°å if (isPreviewExpiry) { String previewUrl = getPreviewUrl(bucketFilePath, bucketName, isPreviewExpiry); String previewUrl = getPreviewUrl(bucketFilePath, bucketName, true); minioResult.setPreviewExpiry(previewUrl); } minioResult.setOriginalName(originalFileName); @@ -291,4 +291,23 @@ } return null; } /** * æ£æ¥ MinIO ä¸å¯¹è±¡æ¯å¦åå¨ * @param bucketName å卿¡¶åç§° * @param bucketFileName æ¡¶ä¸æä»¶åç§° * @return */ public boolean objectExists(String bucketName, String bucketFileName) { try { minioClient.statObject(StatObjectArgs.builder() .bucket(bucketName) .object(bucketFileName) .build()); return true; } catch (Exception e) { return false; } } }