From baa52439dffa6357420fdc359c45e7e8a9bf1618 Mon Sep 17 00:00:00 2001 From: htjcAdmin Date: Sat, 9 Aug 2025 17:54:32 +0800 Subject: [PATCH] =?UTF-8?q?/*=E5=A2=9E=E5=8A=A0minio=E5=8A=9F=E8=83=BD*/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/inspect-tcpserver/error.log | 602 ++++++++++++++++++ pom.xml | 14 + .../minio/config/MinioAutoConfiguration.java | 29 + .../minio/config/MinioProperties.java | 16 + .../controller/FileUploadController.java | 48 ++ .../minio/domain/UploadResponse.java | 12 + .../tcpserver/minio/service/MinioService.java | 170 +++++ src/main/resources/application-dev.yml | 6 + src/main/resources/application.yml | 7 + 9 files changed, 904 insertions(+) create mode 100644 src/main/java/com/inspect/tcpserver/minio/config/MinioAutoConfiguration.java create mode 100644 src/main/java/com/inspect/tcpserver/minio/config/MinioProperties.java create mode 100644 src/main/java/com/inspect/tcpserver/minio/controller/FileUploadController.java create mode 100644 src/main/java/com/inspect/tcpserver/minio/domain/UploadResponse.java create mode 100644 src/main/java/com/inspect/tcpserver/minio/service/MinioService.java diff --git a/logs/inspect-tcpserver/error.log b/logs/inspect-tcpserver/error.log index e69de29..32fce20 100644 --- a/logs/inspect-tcpserver/error.log +++ b/logs/inspect-tcpserver/error.log @@ -0,0 +1,602 @@ +13:32:54.974 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +An attempt was made to call a method that does not exist. The attempt was made from the following location: + + io.minio.S3Base.(S3Base.java:105) + +The following method did not exist: + + okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + +The method's class, okhttp3.RequestBody, is available from the following locations: + + jar:file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar!/okhttp3/RequestBody.class + +The class hierarchy was loaded from the following locations: + + okhttp3.RequestBody: file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar + + +Action: + +Correct the classpath of your application so that it contains a single, compatible version of okhttp3.RequestBody + +13:32:55.001 [main] ERROR o.s.t.c.TestContextManager - [prepareTestInstance,248] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@6bfaa0a6] to prepare test instance [com.inspect.tcpserver.TcpserverApplicationTests@76e9f00b] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:341) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:346) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:341) + at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) + at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) + at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380) + at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) + at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) + at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) + at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:340) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:263) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:256) + at java.util.Optional.orElseGet(Optional.java:267) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:255) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:108) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:107) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:71) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) + at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) + at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileUploadController' defined in file [E:\qinyl\intellij\src\inspect-tcpserver\target\classes\com\inspect\tcpserver\minio\controller\FileUploadController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + ... 67 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:540) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 86 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:637) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 100 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652) + ... 114 common frames omitted +Caused by: java.lang.ExceptionInInitializerError: null + at io.minio.MinioClient$Builder.(MinioClient.java:2462) + at io.minio.MinioClient.builder(MinioClient.java:2454) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration.minioClient(MinioAutoConfiguration.java:17) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$c08d872f.CGLIB$minioClient$0() + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$c08d872f$$FastClassBySpringCGLIB$$f1d15651.invoke() + at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) + at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$c08d872f.minioClient() + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) + ... 115 common frames omitted +Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.11.0 + at io.minio.S3Base.(S3Base.java:107) + ... 128 common frames omitted +Caused by: java.lang.NoSuchMethodError: okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + at io.minio.S3Base.(S3Base.java:105) + ... 128 common frames omitted +14:04:05.341 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +An attempt was made to call a method that does not exist. The attempt was made from the following location: + + io.minio.S3Base.(S3Base.java:105) + +The following method did not exist: + + okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + +The method's class, okhttp3.RequestBody, is available from the following locations: + + jar:file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar!/okhttp3/RequestBody.class + +The class hierarchy was loaded from the following locations: + + okhttp3.RequestBody: file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar + + +Action: + +Correct the classpath of your application so that it contains a single, compatible version of okhttp3.RequestBody + +14:04:05.358 [main] ERROR o.s.t.c.TestContextManager - [prepareTestInstance,248] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1a565afb] to prepare test instance [com.inspect.tcpserver.TcpserverApplicationTests@2fd64b11] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:341) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:346) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:341) + at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) + at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) + at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380) + at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) + at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) + at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) + at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:340) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:263) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:256) + at java.util.Optional.orElseGet(Optional.java:267) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:255) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:108) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:107) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:71) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) + at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) + at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileUploadController' defined in file [E:\qinyl\intellij\src\inspect-tcpserver\target\classes\com\inspect\tcpserver\minio\controller\FileUploadController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + ... 67 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:540) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 86 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:637) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 100 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652) + ... 114 common frames omitted +Caused by: java.lang.ExceptionInInitializerError: null + at io.minio.MinioClient$Builder.(MinioClient.java:2462) + at io.minio.MinioClient.builder(MinioClient.java:2454) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration.minioClient(MinioAutoConfiguration.java:17) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140.CGLIB$minioClient$0() + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140$$FastClassBySpringCGLIB$$ce7d6697.invoke() + at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) + at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140.minioClient() + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) + ... 115 common frames omitted +Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.11.0 + at io.minio.S3Base.(S3Base.java:107) + ... 128 common frames omitted +Caused by: java.lang.NoSuchMethodError: okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + at io.minio.S3Base.(S3Base.java:105) + ... 128 common frames omitted +14:05:26.089 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +An attempt was made to call a method that does not exist. The attempt was made from the following location: + + io.minio.S3Base.(S3Base.java:105) + +The following method did not exist: + + okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + +The method's class, okhttp3.RequestBody, is available from the following locations: + + jar:file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar!/okhttp3/RequestBody.class + +The class hierarchy was loaded from the following locations: + + okhttp3.RequestBody: file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar + + +Action: + +Correct the classpath of your application so that it contains a single, compatible version of okhttp3.RequestBody + +14:06:39.814 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +An attempt was made to call a method that does not exist. The attempt was made from the following location: + + io.minio.S3Base.(S3Base.java:105) + +The following method did not exist: + + okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + +The method's class, okhttp3.RequestBody, is available from the following locations: + + jar:file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar!/okhttp3/RequestBody.class + +The class hierarchy was loaded from the following locations: + + okhttp3.RequestBody: file:/C:/Users/gabri/.m2/repository/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar + + +Action: + +Correct the classpath of your application so that it contains a single, compatible version of okhttp3.RequestBody + +14:06:39.824 [main] ERROR o.s.t.c.TestContextManager - [prepareTestInstance,248] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1a565afb] to prepare test instance [com.inspect.tcpserver.TcpserverApplicationTests@2fd64b11] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:341) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:346) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:341) + at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) + at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) + at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380) + at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) + at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) + at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) + at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) + at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:340) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:263) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:256) + at java.util.Optional.orElseGet(Optional.java:267) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:255) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:108) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:107) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:71) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at java.util.ArrayList.forEach(ArrayList.java:1255) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) + at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) + at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileUploadController' defined in file [E:\qinyl\intellij\src\inspect-tcpserver\target\classes\com\inspect\tcpserver\minio\controller\FileUploadController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + ... 67 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'minioService' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Unsatisfied dependency expressed through method 'minioService' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:799) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:540) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 86 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'minioClient' defined in class path resource [com/inspect/tcpserver/minio/config/MinioAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:657) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:637) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) + ... 100 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method 'minioClient' threw exception; nested exception is java.lang.ExceptionInInitializerError + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652) + ... 114 common frames omitted +Caused by: java.lang.ExceptionInInitializerError: null + at io.minio.MinioClient$Builder.(MinioClient.java:2462) + at io.minio.MinioClient.builder(MinioClient.java:2454) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration.minioClient(MinioAutoConfiguration.java:17) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140.CGLIB$minioClient$0() + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140$$FastClassBySpringCGLIB$$ce7d6697.invoke() + at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) + at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) + at com.inspect.tcpserver.minio.config.MinioAutoConfiguration$$EnhancerBySpringCGLIB$$5c81b140.minioClient() + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) + ... 115 common frames omitted +Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.11.0 + at io.minio.S3Base.(S3Base.java:107) + ... 128 common frames omitted +Caused by: java.lang.NoSuchMethodError: okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody; + at io.minio.S3Base.(S3Base.java:105) + ... 128 common frames omitted +15:35:41.598 [http-nio-22508-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception +java.net.ConnectException: Failed to connect to /192.168.1.116:39000 + at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:297) + at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207) + at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226) + at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106) + at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74) + at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255) + at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32) + at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) + at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) + at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) + at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) + at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) + at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) + at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) + at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) + at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:748) +Caused by: java.net.ConnectException: Connection refused: connect + at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) + at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) + at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) + at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) + at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) + at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) + at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) + at java.net.Socket.connect(Socket.java:589) + at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128) + at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295) + ... 18 common frames omitted diff --git a/pom.xml b/pom.xml index e83d92e..3e9dab4 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,10 @@ org.springframework.boot spring-boot-starter-amqp + + org.springframework.boot + spring-boot-autoconfigure + biz.paluch.logging logstash-gelf @@ -99,6 +103,16 @@ lombok 1.18.24 + + io.minio + minio + 8.5.7 + + + com.squareup.okhttp3 + okhttp + 4.11.0 + diff --git a/src/main/java/com/inspect/tcpserver/minio/config/MinioAutoConfiguration.java b/src/main/java/com/inspect/tcpserver/minio/config/MinioAutoConfiguration.java new file mode 100644 index 0000000..fcf4443 --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/minio/config/MinioAutoConfiguration.java @@ -0,0 +1,29 @@ +package com.inspect.tcpserver.minio.config; + +import com.inspect.tcpserver.minio.service.MinioService; +import io.minio.MinioClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(MinioProperties.class) +public class MinioAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public MinioClient minioClient(MinioProperties props) { + return MinioClient.builder() + .endpoint(props.getEndpoint()) + .credentials(props.getAccessKey(), props.getSecretKey()) + .build(); + } + + @Bean + @ConditionalOnMissingBean + public MinioService minioService(MinioClient minioClient, MinioProperties props) { + return new MinioService(minioClient, props); + } +} + diff --git a/src/main/java/com/inspect/tcpserver/minio/config/MinioProperties.java b/src/main/java/com/inspect/tcpserver/minio/config/MinioProperties.java new file mode 100644 index 0000000..e36f5d0 --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/minio/config/MinioProperties.java @@ -0,0 +1,16 @@ +package com.inspect.tcpserver.minio.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "minio") +public class MinioProperties { + private String endpoint; + private String accessKey; + private String secretKey; + private String bucketName; + private boolean publicBucket = false; +} + + diff --git a/src/main/java/com/inspect/tcpserver/minio/controller/FileUploadController.java b/src/main/java/com/inspect/tcpserver/minio/controller/FileUploadController.java new file mode 100644 index 0000000..f1017bd --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/minio/controller/FileUploadController.java @@ -0,0 +1,48 @@ +package com.inspect.tcpserver.minio.controller; + +import com.inspect.tcpserver.minio.domain.UploadResponse; +import com.inspect.tcpserver.minio.service.MinioService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Slf4j +@RestController +@RequestMapping("/minio") +@RequiredArgsConstructor +public class FileUploadController { + + private final MinioService minioService; + + @PostMapping("/file/upload") + public UploadResponse upload(@RequestParam MultipartFile file) throws Exception { + return minioService.upload(file); + } + + @GetMapping("/file/url") + public String getFileUrl(@RequestParam String objectName) throws Exception { + // 生成 2 小时有效的下载链接 + return minioService.getPreSignedUrl(objectName, 2, TimeUnit.HOURS, "test-bucket"); + } + + @PostMapping("/file/upload-large") + public UploadResponse uploadLargeFile(@RequestParam MultipartFile file) throws Exception { + return minioService.uploadLargeFile(file); + } + + @GetMapping("/file/batch-url") + public List getBatchUrls(@RequestParam List objectNames) throws Exception { + return minioService.getPreSignedUrls(objectNames, 2, TimeUnit.HOURS, "test-bucket"); + } + + @DeleteMapping("/file") + public void deleteFile(@RequestParam String objectName) throws Exception { + minioService.deleteObject(objectName); + } + +} + diff --git a/src/main/java/com/inspect/tcpserver/minio/domain/UploadResponse.java b/src/main/java/com/inspect/tcpserver/minio/domain/UploadResponse.java new file mode 100644 index 0000000..2571318 --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/minio/domain/UploadResponse.java @@ -0,0 +1,12 @@ +package com.inspect.tcpserver.minio.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class UploadResponse { + private String fileName; + private String url; +} + diff --git a/src/main/java/com/inspect/tcpserver/minio/service/MinioService.java b/src/main/java/com/inspect/tcpserver/minio/service/MinioService.java new file mode 100644 index 0000000..a681d57 --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/minio/service/MinioService.java @@ -0,0 +1,170 @@ +package com.inspect.tcpserver.minio.service; + +import com.inspect.tcpserver.minio.config.MinioProperties; +import com.inspect.tcpserver.minio.domain.UploadResponse; + +import io.minio.*; +import io.minio.http.Method; +import io.minio.messages.DeleteObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Slf4j +@RequiredArgsConstructor +public class MinioService { + + private final MinioClient minioClient; + private final MinioProperties props; + + public UploadResponse upload(MultipartFile file) throws Exception { + String fileName = file.getOriginalFilename(); + + try (InputStream in = file.getInputStream()) { + minioClient.putObject( + PutObjectArgs.builder() + .bucket(props.getBucketName()) + .object(fileName) + .stream(in, file.getSize(), -1) + .contentType(file.getContentType()) + .build() + ); + } + + String url = getObjectUrl(fileName); + return new UploadResponse(fileName, url); + } + + public String getObjectUrl(String objectName) throws Exception { + if (props.isPublicBucket()) { + return String.format("%s/%s/%s", props.getEndpoint(), props.getBucketName(), objectName); + } else { + return minioClient.getPresignedObjectUrl( + GetPresignedObjectUrlArgs.builder() + .bucket(props.getBucketName()) + .object(objectName) + .method(Method.GET) + .expiry(7, TimeUnit.DAYS) + .build() + ); + } + } + + public UploadResponse uploadLargeFile(MultipartFile file) throws Exception { + String fileName = file.getOriginalFilename(); + + File tempFile = File.createTempFile("upload-", "-" + fileName); + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + fos.write(file.getBytes()); + } + + minioClient.uploadObject( + UploadObjectArgs.builder() + .bucket(props.getBucketName()) + .object(fileName) + .filename(tempFile.getAbsolutePath()) + .contentType(file.getContentType()) + .build() + ); + + boolean deleted = tempFile.delete(); + if (!deleted) { + log.warn("临时文件删除失败: {}", tempFile.getAbsolutePath()); + } + + String url = getObjectUrl(fileName); + return new UploadResponse(fileName, url); + } + + public String createPreSignedUploadUrl(String objectName, int expiryMinutes) throws Exception { + return minioClient.getPresignedObjectUrl( + GetPresignedObjectUrlArgs.builder() + .bucket(props.getBucketName()) + .object(objectName) + .method(Method.PUT) + .expiry(expiryMinutes, TimeUnit.MINUTES) + .build() + ); + } + + public String getPreSignedUrl(String objectName, int duration, TimeUnit unit, String bucket) throws Exception { + ensureBucket(bucket); + + return minioClient.getPresignedObjectUrl( + GetPresignedObjectUrlArgs.builder() + .bucket(bucket) + .object(objectName) + .method(Method.GET) + .expiry(duration, unit) + .build() + ); + } + + public List getPreSignedUrls(List objectNames, int duration, TimeUnit unit, String bucket) throws Exception { + ensureBucket(bucket); + List urls = new ArrayList<>(); + for (String objectName : objectNames) { + String url = minioClient.getPresignedObjectUrl( + GetPresignedObjectUrlArgs.builder() + .bucket(bucket) + .object(objectName) + .method(Method.GET) + .expiry(duration, unit) + .build() + ); + urls.add(url); + } + return urls; + } + + public void deleteObject(String objectName) throws Exception { + deleteObject(objectName, props.getBucketName()); + } + + public void deleteObject(String objectName, String bucket) throws Exception { + ensureBucket(bucket); + + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket(bucket) + .object(objectName) + .build() + ); + } + + public void deleteObjects(List objectNames) throws Exception { + deleteObjects(objectNames, props.getBucketName()); + } + + public void deleteObjects(List objectNames, String bucket) throws Exception { + ensureBucket(bucket); + + List deleteObjects = new ArrayList<>(); + for (String objectName : objectNames) { + deleteObjects.add(new DeleteObject(objectName)); + } + + minioClient.removeObjects( + RemoveObjectsArgs.builder() + .bucket(bucket) + .objects(deleteObjects) + .build() + ); + } + + private void ensureBucket(String bucket) throws Exception { + boolean bucketExists = minioClient.bucketExists( + BucketExistsArgs.builder().bucket(bucket).build() + ); + if (!bucketExists) { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e905c55..7e19e3f 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -39,3 +39,9 @@ boot: client: false server: true +minio: + endpoint: http://192.168.1.116:9000 + access-key: nrftp + secret-key: Cgygs@2025 + bucket-name: znxsxt-production-upload + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 51272cc..a6c5860 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -40,3 +40,10 @@ boot: client: true server: true +minio: + endpoint: http://192.168.1.200:9000 + access-key: minioadmin + secret-key: minioadmin + bucket-name: mybucket + +