Browse Source

修改 文件上传命名bug——未能正确识别后缀名并修改文件名

zhouyang.xie 1 tháng trước cách đây
mục cha
commit
524c426dae

+ 38 - 18
energy-manage-service/src/main/java/com/energy/manage/service/util/MinioUtils.java

@@ -1,6 +1,5 @@
 package com.energy.manage.service.util;
 
-
 import com.energy.manage.service.domain.dto.minio.ObjectItem;
 import com.xxl.job.core.util.IpUtil;
 import io.minio.*;
@@ -108,10 +107,21 @@ public class MinioUtils {
         List<String> names = new ArrayList<>(multipartFile.length);
         for (MultipartFile file : multipartFile) {
             String fileName = file.getOriginalFilename();
-            String[] split = fileName.split("\\.");
-            if (split.length > 1) {
-                fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
+            // String[] split = fileName.split("\\.");
+            // if (split.length > 1) {
+            // fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
+            // } else {
+            // fileName = fileName + System.currentTimeMillis();
+            // }
+
+            int lastDotIndex = fileName.lastIndexOf(".");
+            if (lastDotIndex != -1) {
+                // 存在后缀:前缀_时间戳.后缀
+                String prefix = fileName.substring(0, lastDotIndex);
+                String suffix = fileName.substring(lastDotIndex);
+                fileName = prefix + "_" + System.currentTimeMillis() + suffix;
             } else {
+                // 无后缀:原文件名+时间戳
                 fileName = fileName + System.currentTimeMillis();
             }
             InputStream in = null;
@@ -122,8 +132,7 @@ public class MinioUtils {
                         .object(fileName)
                         .stream(in, in.available(), -1)
                         .contentType(file.getContentType())
-                        .build()
-                );
+                        .build());
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
@@ -149,12 +158,25 @@ public class MinioUtils {
     public String upload(MultipartFile file) {
 
         String fileName = file.getOriginalFilename();
-        String[] split = fileName.split("\\.");
-        if (split.length > 1) {
-            fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
+        // String[] split = fileName.split("\\.");
+        // if (split.length > 1) {
+        // fileName = split[0] + "_" + System.currentTimeMillis() + "." +
+        // split[split.length - 1];
+        // } else {
+        // fileName = fileName + System.currentTimeMillis();
+        // }
+
+        int lastDotIndex = fileName.lastIndexOf(".");
+        if (lastDotIndex != -1) {
+            // 存在后缀:前缀_时间戳.后缀
+            String prefix = fileName.substring(0, lastDotIndex);
+            String suffix = fileName.substring(lastDotIndex);
+            fileName = prefix + "_" + System.currentTimeMillis() + suffix;
         } else {
+            // 无后缀:原文件名+时间戳
             fileName = fileName + System.currentTimeMillis();
         }
+
         InputStream in = null;
         try {
             in = file.getInputStream();
@@ -163,8 +185,7 @@ public class MinioUtils {
                     .object(fileName)
                     .stream(in, in.available(), -1)
                     .contentType(file.getContentType())
-                    .build()
-            );
+                    .build());
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -177,7 +198,7 @@ public class MinioUtils {
             }
         }
 
-        return this.bucketPath+"/"+this.bucketName+"/"+fileName;
+        return this.bucketPath + "/" + this.bucketName + "/" + fileName;
     }
 
     /**
@@ -203,8 +224,7 @@ public class MinioUtils {
                     .object(fileName)
                     .stream(in, in.available(), -1)
                     .contentType(file.getContentType())
-                    .build()
-            );
+                    .build());
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -217,7 +237,7 @@ public class MinioUtils {
             }
         }
         String ip = IPUtils.getIpAddr(request);
-        return ip +"/"+this.bucketName+"/"+fileName;
+        return ip + "/" + this.bucketName + "/" + fileName;
     }
 
     /**
@@ -234,7 +254,7 @@ public class MinioUtils {
             in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
             out = new ByteArrayOutputStream();
             IOUtils.copy(in, out);
-            //封装返回值
+            // 封装返回值
             byte[] bytes = out.toByteArray();
             HttpHeaders headers = new HttpHeaders();
             try {
@@ -300,9 +320,9 @@ public class MinioUtils {
      */
     public Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> objects) {
         List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList());
-        Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
+        Iterable<Result<DeleteError>> results = minioClient
+                .removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
         return results;
     }
 
-
 }

+ 3 - 1
energy-manage-service/src/main/resources/bootstrap.properties

@@ -1,5 +1,7 @@
 #============================nacos配置=========================================
-spring.cloud.nacos.config.server-addr = 192.168.50.234:8848
+# spring.cloud.nacos.config.server-addr = 106.120.102.238:28488
+# spring.cloud.nacos.config.server-addr = 192.168.50.234:8848
+spring.cloud.nacos.config.server-addr = 10.172.12.211:8848
 spring.cloud.nacos.config.namespace = 79c42a7a-2c7d-4dcf-8a2c-b334271e2191
 spring.cloud.nacos.config.name=application.properties
 spring.cloud.nacos.config.group = @profiles.active@

+ 162 - 0
energy-manage-service/src/main/resources/logback/logback-datang.xml

@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<included>
+    <!-- 定义日志文件 输入位置 -->
+    <springProperty name="log_dir" source="logging.path" defaultValue="./logs"/>
+    <property name="log.pattern"
+              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %X{THREAD_NOTE} [%thread] %-5level %logger - %msg%n"/>
+    <property name="log.maxHistory" value="90" />
+
+    <!--# Console -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 典型的日志pattern -->
+        <encoder>
+            <pattern>[%-5level %d{HH:mm:ss.SSS} | %X{THREAD_NOTE} | %thread | %logger.%method] [%L] - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!-- ERROR级别日志 -->
+    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <!-- 此处设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+
+        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志输出位置  可相对、和绝对路径 -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error.log</fileNamePattern>
+            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
+            则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
+            <maxHistory>${log.maxHistory}</maxHistory>
+        </rollingPolicy>
+    </appender>
+
+    <!-- WARN级别日志 appender -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+
+
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <!-- 此处设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${log.maxHistory}</maxHistory>
+        </rollingPolicy>
+
+    </appender>
+
+    <!-- INFO级别日志 appender -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录INFO级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${log.maxHistory}</maxHistory>
+        </rollingPolicy>
+
+
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <!-- 此处设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- DEBUG级别日志 appender -->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录DEBUG级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <!-- 此处设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${log.maxHistory}</maxHistory>
+            >
+        </rollingPolicy>
+
+    </appender>
+
+    <!-- TRACE级别日志 appender -->
+    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录ERROR级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>TRACE</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <!-- 此处设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${log.maxHistory}</maxHistory>
+
+        </rollingPolicy>
+        >
+    </appender>
+
+    <!--myibatis log configure-->
+    <logger name="com.apache.ibatis" level="TRACE"/>
+    <logger name="java.sql.Connection" level="DEBUG"/>
+    <logger name="java.sql.Statement" level="DEBUG"/>
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+    <!-- root级别   DEBUG -->
+    <root level="INFO">
+        <!-- 控制台输出 STDOUT-->
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="DEBUG"/>
+        <!-- 文件输出 -->
+        <appender-ref ref="ERROR"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="WARN"/>
+        <appender-ref ref="DEBUG"/>
+        <appender-ref ref="TRACE"/>
+    </root>
+
+</included>