doc/若依环境使用手册.docx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application-druid.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/MinioResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
doc/ÈôÒÀ»·¾³Ê¹ÓÃÊÖ²á.docxBinary files differ
pom.xml
@@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.8.9</version> @@ -11,7 +11,7 @@ <name>ruoyi</name> <url>http://www.ruoyi.vip</url> <description>è¥ä¾ç®¡çç³»ç»</description> <properties> <ruoyi.version>3.8.9</ruoyi.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> @@ -35,6 +35,13 @@ <logback.version>1.2.13</logback.version> <spring-security.version>5.7.12</spring-security.version> <spring-framework.version>5.3.39</spring-framework.version> <mybatis-plus.version>3.5.3.1</mybatis-plus.version> <freemarker.version>2.3.30</freemarker.version> <knife4j-spring-ui.version>3.0.3</knife4j-spring-ui.version> <core.version>3.4.1</core.version> <javase.version>3.4.1</javase.version> <minio.version>8.4.3</minio.version> <okhttp.version>4.9.0</okhttp.version> </properties> <!-- ä¾èµå£°æ --> @@ -218,8 +225,80 @@ <version>${ruoyi.version}</version> </dependency> <!-- minio --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>${minio.version}</version> <exclusions> <exclusion> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </exclusion> </exclusions> </dependency> <!-- minioä¾èµokhttp ä¸ç¶æ¥é --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>${okhttp.version}</version> </dependency> </dependencies> </dependencyManagement> <!-- å ¨å±å¼å ¥ --> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!--mybatis-plus代ç çæå¨--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> <!-- Swagger3ä¾èµ --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>${swagger.version}</version> </dependency> <!--Swagger3-Uiç¾å--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-ui</artifactId> <version>${knife4j-spring-ui.version}</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>${core.version}</version> <!-- æè æ´é«çæ¬ --> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>${javase.version}</version> <!-- æè æ´é«çæ¬ --> </dependency> </dependencies> <modules> <module>ruoyi-admin</module> @@ -271,4 +350,4 @@ </pluginRepository> </pluginRepositories> </project> </project> ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,104 @@ package com.ruoyi; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.baomidou.mybatisplus.generator.fill.Column; import java.util.Collections; import java.util.Scanner; // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å ¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ public class CodeGenerator { public static String database_url = "jdbc:mysql://114.132.189.42:9004/lims-zb"; public static String database_username = "root"; public static String database_password= "123456"; public static String author = "è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸"; public static String model_name = "/mes-technical"; // å¦æä¸ºåå¸å¼å¡«å模ååç§°ï¼å¦æä¸æ¯åå¸å¼ä¸ºç©ºå³å¯ public static String setParent = "com.ruoyi.technical"; // å è·¯å¾ public static String tablePrefix = "technical"; // è®¾ç½®è¿æ»¤è¡¨åç¼ public static void main(String[] args) { String projectPath = System.getProperty("user.dir"); FastAutoGenerator.create(database_url, database_username, database_password) // å ¨å±é ç½® .globalConfig(builder -> { builder.author(author) // 设置ä½è .commentDate("yyyy-MM-dd hh:mm:ss") //æ³¨éæ¥æ .outputDir(projectPath + model_name + "/src/main/java") // æå®è¾åºç®å½ .disableOpenDir() //ç¦æ¢æå¼è¾åºç®å½ï¼é»è®¤æå¼ .enableSwagger() // å¼å¯swagger ; }) // å é ç½® .packageConfig(builder -> { builder.entity("pojo"); builder.parent(setParent) // 设置ç¶å å .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + model_name + "/src/main/resources/mapper")); // 设置mapperXmlçæè·¯å¾ }) // çç¥é ç½® .strategyConfig(builder -> { builder.addInclude(scanner("表åï¼å¤ä¸ªç©ºæ ¼åå²").split(" ")) // 设置éè¦çæç表å .addTablePrefix(tablePrefix) // è®¾ç½®è¿æ»¤è¡¨åç¼ // Entity çç¥é ç½® .entityBuilder() .enableLombok() //å¼å¯ Lombok .naming(NamingStrategy.underline_to_camel) //æ°æ®åºè¡¨æ å°å°å®ä½çå½åçç¥ï¼ä¸åçº¿è½¬é©¼å³°å½ .columnNaming(NamingStrategy.underline_to_camel) //æ°æ®åºè¡¨å段æ å°å°å®ä½çå½åçç¥ï¼ä¸åçº¿è½¬é©¼å³°å½ .enableFileOverride() // è¦çå·²ç»çæçEntityæä»¶ .logicDeleteColumnName("state") .addTableFills( new Column("create_time", FieldFill.INSERT), new Column("update_time", FieldFill.INSERT_UPDATE), new Column("create_user", FieldFill.INSERT), new Column("update_user", FieldFill.INSERT_UPDATE) ) .idType(IdType.AUTO) // èªå¢ä¸»é® // Mapper çç¥é ç½® .mapperBuilder() .enableFileOverride() // è¦çå·²çæMapperæä»¶ .enableBaseResultMap() // èªå¨çæresultMap // Service çç¥é ç½® .serviceBuilder() .formatServiceFileName("%sService") //æ ¼å¼å service æ¥å£æä»¶åç§°ï¼%sè¿è¡å¹é 表åï¼å¦ UserService .formatServiceImplFileName("%sServiceImpl") //æ ¼å¼å service å®ç°ç±»æä»¶åç§°ï¼%sè¿è¡å¹é 表åï¼å¦ UserServiceImpl .enableFileOverride() // è¦çå·²çææä»¶ // Controller çç¥é ç½® .controllerBuilder() .enableFileOverride() // è¦çå·²çææä»¶ .enableRestStyle() // å¼å¯çæ@RestController æ§å¶å¨ ; }) //5ãæ¨¡æ¿å¼æ .templateEngine(new FreemarkerTemplateEngine()) //é»è®¤ .execute(); } /** * <p> * è¯»åæ§å¶å°å 容 * </p> */ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请è¾å ¥" + tip + "ï¼"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请è¾å ¥æ£ç¡®ç" + tip + "ï¼"); } } ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -24,7 +24,7 @@ /** * Swagger2çæ¥å£é ç½® * * * @author ruoyi */ @Configuration @@ -37,10 +37,6 @@ /** æ¯å¦å¼å¯swagger */ @Value("${swagger.enabled}") private boolean enabled; /** 设置请æ±çç»ä¸åç¼ */ @Value("${swagger.pathMapping}") private String pathMapping; /** * å建API @@ -64,8 +60,7 @@ .build() /* 设置å®å ¨æ¨¡å¼ï¼swaggerå¯ä»¥è®¾ç½®è®¿é®token */ .securitySchemes(securitySchemes()) .securityContexts(securityContexts()) .pathMapping(pathMapping); .securityContexts(securityContexts()); } /** ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@ druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://localhost:3306/lims-zb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://114.132.189.42:9004/lims-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 # ä»åºæ°æ®æº @@ -59,3 +59,12 @@ wall: config: multi-statement-allow: true minio: endpoint: http://114.132.189.42/ port: 7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ ruoyi-admin/src/main/resources/application.yml
@@ -116,8 +116,6 @@ swagger: # æ¯å¦å¼å¯swagger enabled: true # 请æ±åç¼ pathMapping: /dev-api # 鲿¢XSSæ»å» xss: @@ -127,3 +125,17 @@ excludes: /system/notice # å¹é 龿¥ urlPatterns: /system/*,/monitor/*,/tool/* # mybatis-plusé ç½® mybatis-plus: mapper-locations: classpath*:mapper/**/*Mapper.xml type-aliases-package: com.ruoyi.**.domain global-config: banner: off db-config: id-type: auto configuration: map-underscore-to-camel-case: true cache-enabled: false log-impl: # org.apache.ibatis.logging.stdout.StdOutImpl ruoyi-common/pom.xml
@@ -52,13 +52,13 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!-- JSONå·¥å ·ç±» --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- é¿éJSONè§£æå¨ --> <dependency> <groupId>com.alibaba.fastjson2</groupId> @@ -119,6 +119,22 @@ <artifactId>javax.servlet-api</artifactId> </dependency> <!-- minio --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> </dependency> <!-- minioä¾èµokhttp ä¸ç¶æ¥é --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> </dependencies> </project> </project> ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.common.config; import io.minio.MinioClient; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; @Configuration @Component @ConfigurationProperties(prefix = "minio") @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) .credentials(accessKey, secretKey) .build(); } } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/MinioResult.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.common.core.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class MinioResult { @ApiModelProperty("minioä¸çæä»¶åç§°") private String bucketFileName; @ApiModelProperty("æºæä»¶åç§°") private String originalName; @ApiModelProperty("é¢è§è·¯å¾") private String previewExpiry; } ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,294 @@ package com.ruoyi.common.utils.file; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.common.core.domain.MinioResult; import com.ruoyi.common.exception.UtilException; import com.ruoyi.common.exception.file.InvalidExtensionException; import io.minio.*; import io.minio.http.Method; import io.minio.messages.DeleteError; import io.minio.messages.DeleteObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.FastByteArrayOutputStream; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component public class MinioUtils { @Resource private MinioClient minioClient; @Value("${minio.preview-expiry}") private Integer previewExpiry; /** * 夿å卿¡¶æ¯å¦åå¨ï¼ä¸åå¨åå建 * * @param bucketName å卿¡¶åç§° */ public void existBucket(String bucketName) { try { boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!exists) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } } catch (Exception e) { e.printStackTrace(); } } /** * å建å卿¡¶ * * @param bucketName å卿¡¶åç§° * @return æ¯å¦å建æå */ public Boolean makeBucket(String bucketName) { try { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * å é¤å卿¡¶ * * @param bucketName å卿¡¶åç§° * @return æ¯å¦å 餿å */ public Boolean removeBucket(String bucketName) { try { minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * å¤æå¯¹è±¡æ¯å¦åå¨ * * @param bucketName å卿¡¶åç§° * @param originalFileName MinIOä¸åå¨å¯¹è±¡å ¨è·¯å¾ * @return 对象æ¯å¦åå¨ */ public boolean existObject(String bucketName, String originalFileName) { try { minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(originalFileName).build()); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * æä»¶ä¸ä¼ * * @param bucketName å卿¡¶åç§° * @param file æä»¶ * @return æ¡¶ä¸ä½ç½® */ public MinioResult upload(String bucketName, MultipartFile file, Boolean isPreviewExpiry) throws InvalidExtensionException { MultipartFile[] fileArr = {file}; List<MinioResult> fileNames = upload(bucketName, fileArr, isPreviewExpiry); return fileNames.isEmpty() ? null : fileNames.get(0); } /** * ä¸ä¼ æä»¶ * * @param bucketName å卿¡¶åç§° * @param fileList æä»¶å表 * @return æ¡¶ä¸ä½ç½®å表 */ public List<MinioResult> upload(String bucketName, List<MultipartFile> fileList, Boolean isPreviewExpiry) throws InvalidExtensionException { MultipartFile[] fileArr = fileList.toArray(new MultipartFile[0]); return upload(bucketName, fileArr, isPreviewExpiry); } /** * description: ä¸ä¼ æä»¶ * * @param bucketName å卿¡¶åç§° * @param fileArr æä»¶å表 * @return æ¡¶ä¸ä½ç½®å表 */ public List<MinioResult> upload(String bucketName, MultipartFile[] fileArr, Boolean isPreviewExpiry) throws InvalidExtensionException { for (MultipartFile file : fileArr) { FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); } // ä¿è¯æ¡¶ä¸å®åå¨ existBucket(bucketName); // æ§è¡æ£å¸¸æä½ List<MinioResult> bucketFileNames = new ArrayList<>(fileArr.length); for (MultipartFile file : fileArr) { // è·ååå§æä»¶åç§° String originalFileName = file.getOriginalFilename(); // è·åå½åæ¥æï¼æ ¼å¼ä¾å¦ï¼2020-11 String datePath = new SimpleDateFormat("yyyy-MM").format(new Date()); // æä»¶åç§° String uuid = IdWorker.get32UUID(); // è·åæä»¶åç¼ String suffix = originalFileName.substring(originalFileName.lastIndexOf(".")); String bucketFilePath = datePath + "/" + uuid + suffix; // æ¨éæä»¶å°MinIO try (InputStream in = file.getInputStream()) { minioClient.putObject(PutObjectArgs.builder() .bucket(bucketName) .object(bucketFilePath) .stream(in, in.available(), -1) .contentType(file.getContentType()) .build() ); } catch (Exception e) { throw new UtilException("MinioUtilsï¼ä¸ä¼ æä»¶å·¥å ·ç±»å¼å¸¸"); } MinioResult minioResult = new MinioResult(); minioResult.setBucketFileName(bucketFilePath); // è¿åæ°¸ä¹ é¢è§å°å if (isPreviewExpiry) { String previewUrl = getPreviewUrl(bucketFilePath, bucketName, isPreviewExpiry); minioResult.setPreviewExpiry(previewUrl); } minioResult.setOriginalName(originalFileName); bucketFileNames.add(minioResult); } return bucketFileNames; } /** * æä»¶ä¸è½½ * * @param bucketName å卿¡¶åç§° * @param bucketFileName æ¡¶ä¸æä»¶åç§° * @param originalFileName åå§æä»¶åç§° * @param response response对象 */ public void download(String bucketName, String bucketFileName, String originalFileName, HttpServletResponse response) { GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(bucketName).object(bucketFileName).build(); try (GetObjectResponse objResponse = minioClient.getObject(objectArgs)) { byte[] buf = new byte[1024]; int len; try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { while ((len = objResponse.read(buf)) != -1) { os.write(buf, 0, len); } os.flush(); byte[] bytes = os.toByteArray(); response.setCharacterEncoding("utf-8"); //设置强å¶ä¸è½½ä¸æå¼ response.setContentType("application/force-download"); // 设置éä»¶åç§°ç¼ç originalFileName = new String(originalFileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); // 设置éä»¶åç§° response.addHeader("Content-Disposition", "attachment;fileName=" + originalFileName); // åå ¥æä»¶ try (ServletOutputStream stream = response.getOutputStream()) { stream.write(bytes); stream.flush(); } } } catch (Exception e) { throw new UtilException("MinioUtilsï¼ä¸ä¼ æä»¶å·¥å ·ç±»å¼å¸¸"); } } /** * è·åå·²ä¸ä¼ 对象çæä»¶æµï¼å端å 为ä¸å¡éè¦è·åæä»¶æµå¯ä»¥è°ç¨è¯¥æ¹æ³ï¼ * * @param bucketName å卿¡¶åç§° * @param bucketFileName æ¡¶ä¸æä»¶åç§° * @return æä»¶æµ */ public InputStream getFileStream(String bucketName, String bucketFileName) throws Exception { GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(bucketName).object(bucketFileName).build(); return minioClient.getObject(objectArgs); } /** * æ¹éå é¤æä»¶å¯¹è±¡ç»æ * * @param bucketName å卿¡¶åç§° * @param bucketFileName æ¡¶ä¸æä»¶åç§° * @return å é¤ç»æ */ public DeleteError removeObjectsResult(String bucketName, String bucketFileName) { List<DeleteError> results = removeObjectsResult(bucketName, Collections.singletonList(bucketFileName)); return !results.isEmpty() ? results.get(0) : null; } /** * æ¹éå é¤æä»¶å¯¹è±¡ç»æ * * @param bucketName å卿¡¶åç§° * @param bucketFileNames æ¡¶ä¸æä»¶åç§°éå * @return å é¤ç»æ */ public List<DeleteError> removeObjectsResult(String bucketName, List<String> bucketFileNames) { Iterable<Result<DeleteError>> results = removeObjects(bucketName, bucketFileNames); List<DeleteError> res = new ArrayList<>(); for (Result<DeleteError> result : results) { try { res.add(result.get()); } catch (Exception e) { throw new UtilException("MinioUtilsï¼ä¸ä¼ æä»¶å·¥å ·ç±»å¼å¸¸"); } } return res; } /** * æ¹éå é¤æä»¶å¯¹è±¡ * * @param bucketName å卿¡¶åç§° * @param bucketFileNames æ¡¶ä¸æä»¶åç§°éå */ private Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> bucketFileNames) { List<DeleteObject> dos = bucketFileNames.stream().map(DeleteObject::new).collect(Collectors.toList()); return minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build()); } /** * æ¥è¯¢é¢è§url * @param bucketFileName minioæä»¶åç§° * @param bucketName å卿¡¶åç§° * @param isPreviewExpiry æ¯å¦éè¦è¿ææ¶é´ é»è®¤24å°æ¶ * @return */ public String getPreviewUrl(String bucketFileName, String bucketName, Boolean isPreviewExpiry) { if (StringUtils.isNotBlank(bucketFileName)) { try { minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(bucketFileName).build()); // 为falseåªçæ24å°æ¶æææ¶é¿çurl龿¥ï¼å¯ä»¥è®¿é®è¯¥æä»¶ if (isPreviewExpiry){ return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(bucketFileName).build()); }else { return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(bucketFileName).expiry(previewExpiry, TimeUnit.HOURS).build()); } } catch (Exception e) { throw new UtilException("MinioUtilsï¼ä¸ä¼ æä»¶å·¥å ·ç±»å¼å¸¸"); } } return null; } } ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -17,7 +17,7 @@ /** * éç¨é ç½® * * * @author ruoyi */ @Configuration @@ -32,11 +32,15 @@ /** æ¬å°æä»¶ä¸ä¼ è·¯å¾ */ registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); // // /** swaggeré ç½® */ // registry.addResourceHandler("/swagger-ui/**") // .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") // .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic()); /** swaggeré ç½® */ registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic()); registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** @@ -70,4 +74,4 @@ // è¿åæ°çCorsFilter return new CorsFilter(source); } } }