├── .gitignore ├── README.md ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src └── main ├── java └── com │ └── java │ └── sahil │ └── minio │ ├── ServletInitializer.java │ ├── SpringBootMinioApplication.java │ ├── client │ └── DummyClient.java │ ├── config │ ├── MinioConfiguration.java │ ├── SwaggerConfiguration.java │ └── WebConfig.java │ ├── controller │ ├── SwaggerApiResponse.java │ └── UserController.java │ ├── dto │ ├── FileDto.java │ ├── PageableResponseDto.java │ ├── UserRequestDto.java │ └── UserResponseDto.java │ ├── entity │ └── User.java │ ├── error │ ├── ApiError.java │ ├── EntityNotFoundException.java │ ├── ErrorHandler.java │ ├── ExtensionNotAcceptableException.java │ └── FileCantUploadException.java │ ├── mapper │ └── UserMapper.java │ ├── repo │ └── UserRepo.java │ ├── service │ ├── FileService.java │ ├── UserService.java │ └── impl │ │ ├── FileServiceImpl.java │ │ └── UserServiceImpl.java │ └── util │ └── FileUtil.java └── resources ├── application.yml ├── banner.txt ├── base64Contract.txt ├── base64Signature.txt ├── data.sql ├── docker-compose.yml └── messages.properties /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | .gradle 3 | build/ 4 | !gradle/wrapper/gradle-wrapper.jar 5 | !**/src/main/**/build/ 6 | !**/src/test/**/build/ 7 | 8 | ### STS ### 9 | .apt_generated 10 | .classpath 11 | .factorypath 12 | .project 13 | .settings 14 | .springBeans 15 | .sts4-cache 16 | bin/ 17 | !**/src/main/**/bin/ 18 | !**/src/test/**/bin/ 19 | 20 | ### IntelliJ IDEA ### 21 | .idea 22 | *.iws 23 | *.iml 24 | *.ipr 25 | out/ 26 | !**/src/main/**/out/ 27 | !**/src/test/**/out/ 28 | 29 | ### NetBeans ### 30 | /nbproject/private/ 31 | /nbbuild/ 32 | /dist/ 33 | /nbdist/ 34 | /.nb-gradle/ 35 | 36 | ### VS Code ### 37 | .vscode/ 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **Spring Boot App With MinIO File Storage Server** 2 | 3 | * Docker must be installed on your computer to run the application! 4 | 5 | * Before starting app you have to run Gradle Docker composeUp stage to create MinIo server which 6 | you can access using following url: http://127.0.0.1:9000/ (access key: test, secret key: test1234) 7 | * Create "user" bucket if it not exists 8 | 9 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | maven { 4 | url "https://plugins.gradle.org/m2/" 5 | } 6 | } 7 | dependencies { 8 | classpath "gradle.plugin.com.avast.gradle:gradle-docker-compose-plugin:0.14.3" 9 | } 10 | } 11 | 12 | plugins { 13 | id 'org.springframework.boot' version '2.5.0' 14 | id 'io.spring.dependency-management' version '1.0.11.RELEASE' 15 | id 'java' 16 | id 'war' 17 | id "com.avast.gradle.docker-compose" version "0.14.3" 18 | } 19 | 20 | apply plugin: "com.avast.gradle.docker-compose" 21 | 22 | 23 | group = 'com.java.sahil.minio' 24 | version = '0.0.1-SNAPSHOT' 25 | sourceCompatibility = '11' 26 | 27 | configurations { 28 | compileOnly { 29 | extendsFrom annotationProcessor 30 | } 31 | } 32 | 33 | repositories { 34 | mavenCentral() 35 | } 36 | 37 | dependencies { 38 | implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 39 | implementation 'org.springframework.boot:spring-boot-starter-web' 40 | implementation 'org.springframework.boot:spring-boot-starter-validation' 41 | runtimeOnly 'com.h2database:h2' 42 | compileOnly 'org.projectlombok:lombok' 43 | annotationProcessor 'org.projectlombok:lombok' 44 | implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.6' 45 | implementation group: 'io.minio', name: 'minio', version: '8.2.1' 46 | implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.11' 47 | // implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.9' 48 | implementation('io.springfox:springfox-swagger-ui:2.9.2') 49 | implementation("io.springfox:springfox-swagger2:2.9.2") { 50 | exclude module: 'mapstruct' 51 | } 52 | implementation "io.springfox:springfox-bean-validators:2.9.2" 53 | implementation group: 'org.mapstruct', name: 'mapstruct', version: '1.4.2.Final' 54 | annotationProcessor group: 'org.mapstruct', name: 'mapstruct-processor', version: '1.4.2.Final' 55 | annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' 56 | providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 57 | testImplementation 'org.springframework.boot:spring-boot-starter-test' 58 | implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '3.0.3' 59 | // https://mvnrepository.com/artifact/commons-codec/commons-codec 60 | implementation group: 'commons-codec', name: 'commons-codec', version: '1.15' 61 | 62 | 63 | } 64 | 65 | dockerCompose { 66 | useComposeFiles = ['src/main/resources/docker-compose.yml'] 67 | } 68 | 69 | test { 70 | useJUnitPlatform() 71 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sahilappayev/SpringBootMinIo/362f7714e6bfeb3df603aec7ad7f7b0c1af632ce/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'spring-boot-minio' 2 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/ServletInitializer.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 5 | 6 | public class ServletInitializer extends SpringBootServletInitializer { 7 | 8 | @Override 9 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 10 | return application.sources(SpringBootMinioApplication.class); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/SpringBootMinioApplication.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio; 2 | 3 | import com.java.sahil.minio.client.DummyClient; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.openfeign.EnableFeignClients; 7 | 8 | /** 9 | * @author SahilAppayev 10 | * @since 23.05.2021 11 | */ 12 | 13 | @SpringBootApplication 14 | //@OpenAPIDefinition(info = @Info(title = "SpringBoot - MinIO", version = "1.0", 15 | // description = "Spring Boot App With MinIO File Storage Server")) 16 | public class SpringBootMinioApplication { 17 | 18 | public static void main(String[] args) { 19 | SpringApplication.run(SpringBootMinioApplication.class, args); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/client/DummyClient.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.client; 2 | 3 | import lombok.SneakyThrows; 4 | import org.apache.commons.io.IOUtils; 5 | 6 | import java.io.FileInputStream; 7 | 8 | public class DummyClient { 9 | 10 | @SneakyThrows 11 | public static String getBase64Contract(){ 12 | FileInputStream fis = new FileInputStream("src/main/resources/base64Contract.txt"); 13 | return IOUtils.toString(fis, "UTF-8"); 14 | } 15 | 16 | @SneakyThrows 17 | public static String getBase64Signature(){ 18 | FileInputStream fis = new FileInputStream("src/main/resources/base64Signature.txt"); 19 | return IOUtils.toString(fis, "UTF-8"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/config/MinioConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.config; 2 | 3 | import io.minio.MinioClient; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | public class MinioConfiguration { 10 | @Value("${minio.access-key}") 11 | private String accessKey; 12 | @Value("${minio.secret-key}") 13 | private String secretKet; 14 | @Value("${minio.url}") 15 | private String url; 16 | 17 | @Bean 18 | public MinioClient minioClient() { 19 | return MinioClient.builder() 20 | .credentials(accessKey, secretKet) 21 | .endpoint(url).build(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/config/SwaggerConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; 9 | import springfox.documentation.builders.ApiInfoBuilder; 10 | import springfox.documentation.builders.PathSelectors; 11 | import springfox.documentation.builders.RequestHandlerSelectors; 12 | import springfox.documentation.service.ApiInfo; 13 | import springfox.documentation.spi.DocumentationType; 14 | import springfox.documentation.spring.web.plugins.Docket; 15 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 16 | 17 | import java.util.Collections; 18 | 19 | @Configuration 20 | @EnableSwagger2 21 | public class SwaggerConfiguration extends WebMvcConfigurationSupport { 22 | @Value("${application.swagger.title}") 23 | private String apiTitle; 24 | @Value("${application.swagger.description}") 25 | private String apiDescription; 26 | @Value("${application.swagger.version}") 27 | private String apiVersion; 28 | 29 | @Bean 30 | public Docket api() { 31 | return new Docket(DocumentationType.SWAGGER_2) 32 | .select() 33 | .apis(RequestHandlerSelectors.basePackage("com.java.sahil.minio")) 34 | .paths(PathSelectors.any()) 35 | .build().apiInfo(apiInfo()) 36 | .produces(Collections.singleton(MediaType.APPLICATION_JSON_VALUE)) 37 | .consumes(Collections.singleton(MediaType.APPLICATION_JSON_VALUE)); 38 | } 39 | 40 | private ApiInfo apiInfo() { 41 | return new ApiInfoBuilder() 42 | .title(apiTitle) 43 | .version(apiVersion) 44 | .description(apiDescription) 45 | .build(); 46 | } 47 | 48 | @Override 49 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 50 | registry.addResourceHandler("swagger-ui.html") 51 | .addResourceLocations("classpath:/META-INF/resources/"); 52 | registry.addResourceHandler("/webjars/**") 53 | .addResourceLocations("classpath:/META-INF/resources/webjars/"); 54 | } 55 | } 56 | 57 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/config/WebConfig.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 5 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | @Configuration 9 | @EnableWebMvc 10 | public class WebConfig implements WebMvcConfigurer { 11 | 12 | @Override 13 | public void addCorsMappings(CorsRegistry registry) { 14 | registry.addMapping("/**") 15 | .allowedHeaders("*") 16 | .allowedMethods("*") 17 | .allowedOrigins("*") 18 | .maxAge(600); 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/controller/SwaggerApiResponse.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.controller; 2 | 3 | import com.java.sahil.minio.error.ApiError; 4 | import io.swagger.annotations.ApiResponse; 5 | import io.swagger.annotations.ApiResponses; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target(ElementType.METHOD) 14 | @ApiResponses(value = { 15 | @ApiResponse(code = 500, message = "Server Error", response = ApiError.class), 16 | @ApiResponse(code = 404, message = "Not Found", response = ApiError.class), 17 | }) 18 | public @interface SwaggerApiResponse { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.controller; 2 | 3 | import com.java.sahil.minio.dto.FileDto; 4 | import com.java.sahil.minio.dto.PageableResponseDto; 5 | import com.java.sahil.minio.dto.UserRequestDto; 6 | import com.java.sahil.minio.dto.UserResponseDto; 7 | import com.java.sahil.minio.service.UserService; 8 | import io.swagger.annotations.ApiOperation; 9 | import lombok.RequiredArgsConstructor; 10 | import lombok.SneakyThrows; 11 | import org.springframework.beans.factory.annotation.Value; 12 | import org.springframework.core.io.InputStreamResource; 13 | import org.springframework.http.HttpHeaders; 14 | import org.springframework.http.HttpStatus; 15 | import org.springframework.http.MediaType; 16 | import org.springframework.http.ResponseEntity; 17 | import org.springframework.web.bind.annotation.DeleteMapping; 18 | import org.springframework.web.bind.annotation.GetMapping; 19 | import org.springframework.web.bind.annotation.PathVariable; 20 | import org.springframework.web.bind.annotation.PostMapping; 21 | import org.springframework.web.bind.annotation.PutMapping; 22 | import org.springframework.web.bind.annotation.RequestBody; 23 | import org.springframework.web.bind.annotation.RequestMapping; 24 | import org.springframework.web.bind.annotation.RequestParam; 25 | import org.springframework.web.bind.annotation.ResponseStatus; 26 | import org.springframework.web.bind.annotation.RestController; 27 | import org.springframework.web.multipart.MultipartFile; 28 | 29 | import javax.validation.Valid; 30 | import java.io.ByteArrayInputStream; 31 | import java.io.File; 32 | import java.io.InputStream; 33 | import java.nio.file.Files; 34 | import java.nio.file.Path; 35 | import java.util.List; 36 | import java.util.Map; 37 | 38 | @RestController 39 | @RequestMapping("users") 40 | @RequiredArgsConstructor 41 | public class UserController { 42 | 43 | private final UserService userService; 44 | @Value("${minio.image-folder}") 45 | private String imageFolder; 46 | @Value("${minio.video-folder}") 47 | private String videoFolder; 48 | @Value("${minio.resume-folder}") 49 | private String resumeFolder; 50 | 51 | @GetMapping 52 | @ApiOperation(value = "Get User List as Pageable") 53 | @SwaggerApiResponse 54 | public ResponseEntity>> getAllPaged( 55 | @RequestParam(value = "page", defaultValue = "0") int page, 56 | @RequestParam(value = "size", defaultValue = "5") int size) { 57 | return ResponseEntity.status(HttpStatus.OK).body(userService.findAll(page, size)); 58 | } 59 | 60 | 61 | @GetMapping("{id}") 62 | @ApiOperation(value = "Get User by Id") 63 | @SwaggerApiResponse 64 | public ResponseEntity getById(@PathVariable("id") Long id) { 65 | return ResponseEntity.status(HttpStatus.OK).body(userService.findById(id)); 66 | } 67 | 68 | @PostMapping 69 | @ApiOperation(value = "Add User") 70 | @SwaggerApiResponse 71 | public ResponseEntity create(@Valid @RequestBody UserRequestDto userRequestDto) { 72 | return ResponseEntity.status(HttpStatus.CREATED).body(userService.create(userRequestDto)); 73 | } 74 | 75 | @PutMapping("{id}") 76 | @ApiOperation(value = "Update User") 77 | @SwaggerApiResponse 78 | public ResponseEntity update(@PathVariable("id") Long id, 79 | @Valid @RequestBody UserRequestDto userRequestDto) { 80 | return ResponseEntity.status(HttpStatus.CREATED).body(userService.update(userRequestDto, id)); 81 | } 82 | 83 | @DeleteMapping("{id}") 84 | @ApiOperation(value = "Delete User") 85 | @SwaggerApiResponse 86 | public ResponseEntity delete(@PathVariable("id") Long id) { 87 | return ResponseEntity.status(HttpStatus.OK).body(userService.delete(id)); 88 | } 89 | 90 | /** 91 | * FILE URIs 92 | */ 93 | @PostMapping(value = "/image/{id}") 94 | @ApiOperation(value = "Add User Image") 95 | public ResponseEntity createImage(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 96 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.uploadImage(file, id))); 97 | } 98 | 99 | @PutMapping(value = "/image/{id}") 100 | @ApiOperation(value = "Update User Image") 101 | public ResponseEntity updateImage(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 102 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.updateImage(file, id))); 103 | } 104 | 105 | @PutMapping(value = "/image/contract/{dummyPin}") 106 | @ApiOperation(value = "Update User Image") 107 | public ResponseEntity uploadContractByPin(@PathVariable String dummyPin) { 108 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.uploadContractByPin(dummyPin))); 109 | } 110 | 111 | @GetMapping(value = "/image/{fileName}", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE}) 112 | @ApiOperation(value = "Get User Image") 113 | @ResponseStatus(HttpStatus.OK) 114 | public byte[] getImage(@PathVariable("fileName") String fileName) { 115 | return userService.getFile(fileName, imageFolder); 116 | } 117 | 118 | @DeleteMapping("/image/{id}") 119 | @ApiOperation(value = "Delete User Image") 120 | public void deleteUserImage(@PathVariable("id") Long id) { 121 | userService.deleteUserImage(id); 122 | } 123 | 124 | @PostMapping(value = "/video/{id}") 125 | @ApiOperation(value = "Add User Video") 126 | public ResponseEntity createVideo(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 127 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.uploadVideo(file, id))); 128 | } 129 | 130 | @PutMapping(value = "/video/{id}") 131 | @ApiOperation(value = "Update User Video") 132 | public ResponseEntity updateVideo(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 133 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.updateVideo(file, id))); 134 | } 135 | 136 | @SneakyThrows 137 | @GetMapping(value = "/video/{fileName}") 138 | @ApiOperation(value = "Get User Video") 139 | public ResponseEntity getVideo(@PathVariable("fileName") String fileName) { 140 | byte[] videoData = userService.getFile(fileName, videoFolder); 141 | try (InputStream file = new ByteArrayInputStream(videoData)) { 142 | Path path = new File(fileName).toPath(); 143 | String mimeType = Files.probeContentType(path); 144 | HttpHeaders headers = new HttpHeaders(); 145 | headers.set("Accept-Ranges", "bytes"); 146 | headers.set("Content-Type", mimeType); 147 | headers.set("Content-Range", "bytes 50-1025/17839845"); 148 | headers.set("Content-Length", String.valueOf(videoData.length)); 149 | return new ResponseEntity<>(new InputStreamResource(file), headers, HttpStatus.OK); 150 | } 151 | } 152 | 153 | @DeleteMapping("/video/{id}") 154 | @ApiOperation(value = "Delete User Video") 155 | public void deleteUserVideo(@PathVariable("id") Long id) { 156 | userService.deleteUserVideo(id); 157 | } 158 | 159 | 160 | @PostMapping("/resume/{id}") 161 | @ApiOperation(value = "Add User Pdf Resume") 162 | public ResponseEntity uploadResume(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 163 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.uploadResume(file, id))); 164 | } 165 | 166 | @PutMapping(value = "/resume/{id}") 167 | @ApiOperation(value = "Update User Pdf Resume") 168 | public ResponseEntity updateResume(@PathVariable Long id, @Valid @RequestParam MultipartFile file) { 169 | return ResponseEntity.status(HttpStatus.CREATED).body(new FileDto(userService.updateResume(file, id))); 170 | } 171 | 172 | @GetMapping(value = "/resume/{fileName}", produces = {MediaType.APPLICATION_PDF_VALUE}) 173 | @ApiOperation(value = "Get User Resume") 174 | @ResponseStatus(HttpStatus.OK) 175 | public byte[] getResume(@PathVariable("fileName") String fileName) { 176 | return userService.getFile(fileName, resumeFolder); 177 | } 178 | 179 | @PostMapping("/{id}/upload-photos") 180 | public Map uploadPhotos(@PathVariable Long id, 181 | @RequestParam String[] names, 182 | @RequestParam MultipartFile[] files) { 183 | return userService.uploadPhotos(id, names, files); 184 | } 185 | 186 | } 187 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/dto/FileDto.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.dto; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.experimental.FieldDefaults; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | @FieldDefaults(level = AccessLevel.PRIVATE) 13 | public class FileDto { 14 | String fileName; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/dto/PageableResponseDto.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class PageableResponseDto implements Serializable { 13 | 14 | private T responseDto; 15 | private long totalElementsOnDatabase; 16 | private long returnedElementsToUI; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/dto/UserRequestDto.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class UserRequestDto { 13 | 14 | @NotBlank 15 | private String name; 16 | @NotBlank 17 | private String surname; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/dto/UserResponseDto.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.Map; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class UserResponseDto { 13 | 14 | private Long id; 15 | private String name; 16 | private String surname; 17 | private String photo; 18 | private String video; 19 | private String resume; 20 | 21 | private Map photos; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.entity; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import javax.persistence.ElementCollection; 8 | import javax.persistence.Entity; 9 | import javax.persistence.GeneratedValue; 10 | import javax.persistence.GenerationType; 11 | import javax.persistence.Id; 12 | import javax.persistence.Table; 13 | import java.io.Serializable; 14 | import java.util.HashMap; 15 | import java.util.Map; 16 | 17 | @Getter 18 | @Setter 19 | @EqualsAndHashCode(of = "id") 20 | @Entity 21 | @Table(name = "user") 22 | public class User implements Serializable { 23 | private static final long serialVersionUID = 1L; 24 | 25 | @Id 26 | @GeneratedValue(strategy = GenerationType.IDENTITY) 27 | private Long id; 28 | private String name; 29 | private String surname; 30 | private String photo; 31 | private String video; 32 | private String resume; 33 | 34 | @ElementCollection 35 | private Map photos = new HashMap<>(); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/error/ApiError.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.error; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ApiError { 9 | private int code; 10 | private String message; 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/error/EntityNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.error; 2 | 3 | public class EntityNotFoundException extends RuntimeException { 4 | public EntityNotFoundException(Class entity) { 5 | super(entity.getSimpleName() + " "); 6 | } 7 | 8 | public EntityNotFoundException(Class entity, Object id) { 9 | super(entity.getSimpleName() + " with ID: " + id + " "); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/error/ErrorHandler.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.error; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.context.annotation.PropertySource; 6 | import org.springframework.http.HttpHeaders; 7 | import org.springframework.http.HttpStatus; 8 | import org.springframework.http.ResponseEntity; 9 | import org.springframework.http.converter.HttpMessageNotReadableException; 10 | import org.springframework.validation.FieldError; 11 | import org.springframework.web.bind.MethodArgumentNotValidException; 12 | import org.springframework.web.bind.annotation.ExceptionHandler; 13 | import org.springframework.web.bind.annotation.ResponseStatus; 14 | import org.springframework.web.bind.annotation.RestControllerAdvice; 15 | import org.springframework.web.context.request.WebRequest; 16 | import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; 17 | 18 | import java.util.HashMap; 19 | import java.util.Map; 20 | 21 | import static net.logstash.logback.argument.StructuredArguments.kv; 22 | 23 | @RestControllerAdvice 24 | @Slf4j 25 | @PropertySource(value = "classpath:messages.properties", encoding = "UTF-8") 26 | public class ErrorHandler extends ResponseEntityExceptionHandler { 27 | @Value("${error.notFound}") 28 | private String notFound; 29 | @Value("${error.extensionNotAcceptable}") 30 | private String extensionError; 31 | 32 | 33 | @Override 34 | protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, 35 | HttpHeaders headers, 36 | HttpStatus status, 37 | WebRequest request) { 38 | Map errors = new HashMap<>(); 39 | var ref = new Object() { 40 | String fieldName = null; 41 | String message = null; 42 | }; 43 | ex.getBindingResult().getAllErrors().forEach((error) -> { 44 | ref.fieldName = ((FieldError) error).getField(); 45 | ref.message = error.getDefaultMessage(); 46 | errors.put(ref.fieldName, ref.message); 47 | }); 48 | errors.forEach((fieldName, message) -> { 49 | log.error("Api error, {}, message: {} ", 50 | kv("errorCode", 1011), fieldName + " - " + message); 51 | }); 52 | return new ResponseEntity<>(new ApiError(1011, ref.fieldName + " - " + ref.message), 53 | HttpStatus.BAD_REQUEST); 54 | } 55 | 56 | @Override 57 | protected ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex, 58 | HttpHeaders headers, 59 | HttpStatus status, 60 | WebRequest request) { 61 | log.error("Api error, {}, message: {} ", 62 | kv("errorCode", 1011), ex.getMessage()); 63 | return new ResponseEntity<>(new ApiError(1011, ex.getCause().getMessage()), 64 | HttpStatus.BAD_REQUEST); 65 | } 66 | 67 | 68 | @ExceptionHandler(ExtensionNotAcceptableException.class) 69 | @ResponseStatus(HttpStatus.BAD_REQUEST) 70 | public ApiError extensionError(final Exception e) { 71 | log.error("Api error, {}, message: {}, {} ", 72 | kv("errorCode", 1001), e.getMessage(), extensionError); 73 | return new ApiError(1001, e.getMessage() + extensionError); 74 | } 75 | 76 | @ExceptionHandler(EntityNotFoundException.class) 77 | @ResponseStatus(HttpStatus.NOT_FOUND) 78 | public ApiError entityNotFound(final Exception e) { 79 | log.error("Api error, {}, message: {}, {} ", 80 | kv("errorCode", 1002), e.getMessage(), notFound); 81 | return new ApiError(1002, e.getMessage() + notFound); 82 | } 83 | 84 | @ExceptionHandler(FileCantUploadException.class) 85 | @ResponseStatus(HttpStatus.BAD_REQUEST) 86 | public ApiError fileUploadError(final Exception e) { 87 | log.error("Api error, {}, message: {}", 88 | kv("errorCode", 1001), e.getMessage()); 89 | return new ApiError(1001, e.getMessage()); 90 | } 91 | 92 | } -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/error/ExtensionNotAcceptableException.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.error; 2 | 3 | public class ExtensionNotAcceptableException extends RuntimeException { 4 | public ExtensionNotAcceptableException(String extension) { 5 | super("." + extension + " "); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/error/FileCantUploadException.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.error; 2 | 3 | public class FileCantUploadException extends RuntimeException { 4 | public FileCantUploadException(String fileName) { 5 | super(fileName + ",this file cant upload!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.mapper; 2 | 3 | import com.java.sahil.minio.dto.UserRequestDto; 4 | import com.java.sahil.minio.dto.UserResponseDto; 5 | import com.java.sahil.minio.entity.User; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.ReportingPolicy; 8 | 9 | import java.util.List; 10 | 11 | @Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE, 12 | unmappedTargetPolicy = ReportingPolicy.IGNORE, 13 | componentModel = "spring") 14 | public interface UserMapper { 15 | 16 | UserResponseDto toUserDto(User user); 17 | 18 | User toUserEntity(UserRequestDto userRequestDto); 19 | 20 | List toUserDtoList(List userList); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/repo/UserRepo.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.repo; 2 | 3 | import com.java.sahil.minio.entity.User; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | 6 | public interface UserRepo extends JpaRepository { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.service; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | public interface FileService { 6 | 7 | byte[] getFile(String fileName, String folder); 8 | 9 | String uploadImage(MultipartFile file, String folder, boolean isResize); 10 | 11 | void deleteFile(String fileName, String folder); 12 | 13 | String uploadVideo(MultipartFile file, String folder); 14 | 15 | String uploadPdf(MultipartFile file, String folder); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.service; 2 | 3 | import com.java.sahil.minio.dto.PageableResponseDto; 4 | import com.java.sahil.minio.dto.UserRequestDto; 5 | import com.java.sahil.minio.dto.UserResponseDto; 6 | import org.springframework.web.multipart.MultipartFile; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | public interface UserService { 12 | 13 | UserResponseDto create(UserRequestDto userRequestDto); 14 | 15 | UserResponseDto update(UserRequestDto userRequestDto, Long id); 16 | 17 | UserResponseDto findById(Long id); 18 | 19 | PageableResponseDto> findAll(int page, int size); 20 | 21 | UserResponseDto delete(Long id); 22 | 23 | String uploadImage(MultipartFile file, Long id); 24 | 25 | String updateImage(MultipartFile file, Long id); 26 | 27 | void deleteUserImage(Long id); 28 | 29 | void deleteFile(String fileName, String folder); 30 | 31 | byte[] getFile(String fileName, String folder); 32 | 33 | String uploadVideo(MultipartFile file, Long id); 34 | 35 | String updateVideo(MultipartFile file, Long id); 36 | 37 | void deleteUserVideo(Long id); 38 | 39 | String uploadContractByPin(String dummyPin); 40 | 41 | String uploadResume(MultipartFile file, Long id); 42 | 43 | String updateResume(MultipartFile file, Long id); 44 | 45 | Map uploadPhotos(Long id, String[] names, MultipartFile[] files); 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/service/impl/FileServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.service.impl; 2 | 3 | import com.java.sahil.minio.service.FileService; 4 | import com.java.sahil.minio.util.FileUtil; 5 | import io.minio.GetObjectArgs; 6 | import io.minio.MinioClient; 7 | import io.minio.PutObjectArgs; 8 | import io.minio.RemoveObjectArgs; 9 | import io.minio.errors.ErrorResponseException; 10 | import io.minio.messages.ErrorResponse; 11 | import lombok.RequiredArgsConstructor; 12 | import lombok.SneakyThrows; 13 | import lombok.extern.slf4j.Slf4j; 14 | import org.springframework.beans.factory.annotation.Value; 15 | import org.springframework.stereotype.Service; 16 | import org.springframework.web.multipart.MultipartFile; 17 | 18 | import javax.imageio.ImageIO; 19 | import java.awt.image.BufferedImage; 20 | import java.io.ByteArrayInputStream; 21 | import java.io.ByteArrayOutputStream; 22 | import java.io.File; 23 | import java.io.InputStream; 24 | import java.nio.file.Files; 25 | import java.nio.file.Path; 26 | 27 | import static net.logstash.logback.argument.StructuredArguments.kv; 28 | 29 | @Service 30 | @RequiredArgsConstructor 31 | @Slf4j 32 | public class FileServiceImpl implements FileService { 33 | private final MinioClient minioClient; 34 | private final FileUtil fileUtil; 35 | @Value("${minio.bucket}") 36 | private String bucketName; 37 | private final String VIDEO_MEDIA_TYPE = "video"; 38 | private final String IMAGE_MEDIA_TYPE = "image"; 39 | private final String PDF_MEDIA_TYPE = "pdf"; 40 | 41 | @SneakyThrows 42 | @Override 43 | public byte[] getFile(String fileName, String folder) { 44 | String objectName = folder + fileName; 45 | GetObjectArgs minioRequest = GetObjectArgs.builder().bucket(bucketName).object(objectName).build(); 46 | byte[] bytes = null; 47 | try { 48 | bytes = minioClient.getObject(minioRequest).readAllBytes(); 49 | } catch (ErrorResponseException e) { 50 | ErrorResponse response = e.errorResponse(); 51 | log.error("Minio error occurred with: {}, {}, {}", 52 | kv("code", response.code()), kv("message", response.message()), 53 | kv("objectName", response.objectName())); 54 | } 55 | return bytes; 56 | } 57 | 58 | @SneakyThrows 59 | @Override 60 | public String uploadImage(MultipartFile file, String folder, boolean isResize) { 61 | String fileExtension = fileUtil.getFileExtensionIfAcceptable(file, IMAGE_MEDIA_TYPE); 62 | String fileName = fileUtil.generateUniqueName(fileExtension); 63 | String objectName = folder + fileName; 64 | InputStream inputStream = file.getInputStream(); 65 | 66 | if (isResize){ 67 | BufferedImage image = ImageIO.read(inputStream); 68 | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 69 | ImageIO.write(fileUtil.resizeImage(image, image.getWidth(), image.getHeight()), fileExtension, byteArrayOutputStream); 70 | inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); 71 | } 72 | 73 | minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream( 74 | inputStream, inputStream.available(), -1) 75 | .contentType(file.getContentType()) 76 | .build()); 77 | return fileName; 78 | } 79 | 80 | 81 | @SneakyThrows 82 | @Override 83 | public void deleteFile(String fileName, String folder) { 84 | String objectName = folder + fileName; 85 | minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build()); 86 | } 87 | 88 | @SneakyThrows 89 | @Override 90 | public String uploadVideo(MultipartFile file, String folder) { 91 | String fileExtension = fileUtil.getFileExtensionIfAcceptable(file, VIDEO_MEDIA_TYPE); 92 | String fileName = fileUtil.generateUniqueName(fileExtension); 93 | String objectName = folder + fileName; 94 | minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream( 95 | file.getInputStream(), file.getInputStream().available(), -1) 96 | .contentType(file.getContentType()) 97 | .build()); 98 | return fileName; 99 | } 100 | 101 | @SneakyThrows 102 | @Override 103 | public String uploadPdf(MultipartFile file, String folder) { 104 | String fileExtension = fileUtil.getFileExtensionIfAcceptable(file, PDF_MEDIA_TYPE); 105 | String fileName = fileUtil.generateUniqueName(fileExtension); 106 | String objectName = folder + fileName; 107 | InputStream inputStream = file.getInputStream(); 108 | minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream( 109 | inputStream, inputStream.available(), -1) 110 | .contentType(file.getContentType()) 111 | .build()); 112 | return fileName; 113 | } 114 | 115 | @SneakyThrows 116 | public String uploadInputStreamImage(InputStream file, String folder) { 117 | String fileName = fileUtil.generateUniqueName(fileUtil.getFileExtensionFromInputStream(file)); 118 | String fileExtension = fileUtil.getFileExtensionIfAcceptable(fileName, IMAGE_MEDIA_TYPE); 119 | Path path = new File(fileName).toPath(); 120 | String mimeType = Files.probeContentType(path); 121 | fileName = fileUtil.generateUniqueName(fileExtension); 122 | String objectName = folder + fileName; 123 | 124 | minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream( 125 | file, file.available(), -1) 126 | .contentType(mimeType) 127 | .build()); 128 | return fileName; 129 | } 130 | 131 | } 132 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.service.impl; 2 | 3 | import com.java.sahil.minio.dto.PageableResponseDto; 4 | import com.java.sahil.minio.dto.UserRequestDto; 5 | import com.java.sahil.minio.dto.UserResponseDto; 6 | import com.java.sahil.minio.entity.User; 7 | import com.java.sahil.minio.error.EntityNotFoundException; 8 | import com.java.sahil.minio.error.FileCantUploadException; 9 | import com.java.sahil.minio.mapper.UserMapper; 10 | import com.java.sahil.minio.repo.UserRepo; 11 | import com.java.sahil.minio.service.UserService; 12 | import com.java.sahil.minio.util.FileUtil; 13 | import lombok.RequiredArgsConstructor; 14 | import lombok.SneakyThrows; 15 | import lombok.extern.slf4j.Slf4j; 16 | import org.apache.commons.codec.binary.Base64; 17 | import org.springframework.beans.factory.annotation.Autowired; 18 | import org.springframework.beans.factory.annotation.Value; 19 | import org.springframework.data.domain.PageRequest; 20 | import org.springframework.data.domain.Pageable; 21 | import org.springframework.stereotype.Service; 22 | import org.springframework.transaction.PlatformTransactionManager; 23 | import org.springframework.transaction.TransactionStatus; 24 | import org.springframework.transaction.annotation.Transactional; 25 | import org.springframework.transaction.support.DefaultTransactionDefinition; 26 | import org.springframework.web.multipart.MultipartFile; 27 | 28 | import javax.imageio.ImageIO; 29 | import java.awt.Color; 30 | import java.awt.Font; 31 | import java.awt.Graphics2D; 32 | import java.awt.image.BufferedImage; 33 | import java.io.ByteArrayInputStream; 34 | import java.io.ByteArrayOutputStream; 35 | import java.io.InputStream; 36 | import java.util.List; 37 | import java.util.Map; 38 | 39 | import static com.java.sahil.minio.client.DummyClient.getBase64Contract; 40 | import static com.java.sahil.minio.client.DummyClient.getBase64Signature; 41 | import static net.logstash.logback.argument.StructuredArguments.kv; 42 | 43 | @Service 44 | @Slf4j 45 | @RequiredArgsConstructor 46 | public class UserServiceImpl implements UserService { 47 | 48 | private final UserRepo userRepo; 49 | private final FileServiceImpl fileServiceImpl; 50 | private final UserMapper userMapper; 51 | private final FileUtil fileUtil; 52 | @Value("${minio.image-folder}") 53 | private String imageFolder; 54 | @Value("${minio.video-folder}") 55 | private String videoFolder; 56 | @Value("${minio.resume-folder}") 57 | private String resumeFolder; 58 | 59 | @Override 60 | @Transactional 61 | public UserResponseDto create(UserRequestDto userRequestDto) { 62 | log.info("create User started with: {}", kv("userRequestDto", userRequestDto)); 63 | User user = userRepo.save(userMapper.toUserEntity(userRequestDto)); 64 | UserResponseDto userResponseDto = userMapper.toUserDto(user); 65 | log.info("create User completed successfully with: {}", kv("userRequestDto", userRequestDto)); 66 | return userResponseDto; 67 | } 68 | 69 | @Override 70 | @Transactional 71 | public UserResponseDto update(UserRequestDto userRequestDto, Long id) { 72 | log.info("update User started with: {}, {}", kv("id", id), 73 | kv("userRequestDto", userRequestDto)); 74 | User user = userRepo.findById(id).orElseThrow(() -> { 75 | throw new EntityNotFoundException(User.class, id); 76 | }); 77 | user.setName(userRequestDto.getName()); 78 | user.setSurname(userRequestDto.getSurname()); 79 | User saved = userRepo.save(user); 80 | UserResponseDto userResponseDto = userMapper.toUserDto(saved); 81 | log.info("update User completed successfully with: {}, {}", kv("id", id), 82 | kv("userRequestDto", userRequestDto)); 83 | return userResponseDto; 84 | } 85 | 86 | @Override 87 | @Transactional(readOnly = true) 88 | public UserResponseDto findById(Long id) { 89 | log.info("findById User started with: {}", kv("id", id)); 90 | User user = userRepo.findById(id).orElseThrow(() -> { 91 | throw new EntityNotFoundException(User.class, id); 92 | }); 93 | UserResponseDto userResponseDto = userMapper.toUserDto(user); 94 | log.info("findById User completed successfully with: {}", kv("id", id)); 95 | return userResponseDto; 96 | } 97 | 98 | @Override 99 | @Transactional(readOnly = true) 100 | public PageableResponseDto> findAll(int page, int size) { 101 | log.info("findAll User started"); 102 | Pageable pageable = PageRequest.of(page, size); 103 | List userList = userRepo.findAll(pageable).getContent(); 104 | log.info("findAll User completed successfully"); 105 | return new PageableResponseDto<>(userMapper.toUserDtoList(userList), 106 | userRepo.count(), userList.size()); 107 | } 108 | 109 | @Override 110 | @Transactional 111 | public UserResponseDto delete(Long id) { 112 | log.info("delete User started with: {}", kv("id", id)); 113 | User user = userRepo.findById(id).orElseThrow(() -> { 114 | throw new EntityNotFoundException(User.class, id); 115 | }); 116 | if (user.getPhoto() != null) { 117 | deleteFile(user.getPhoto(), imageFolder); 118 | } 119 | if (user.getVideo() != null) { 120 | deleteFile(user.getVideo(), videoFolder); 121 | } 122 | userRepo.delete(user); 123 | UserResponseDto userResponseDto = userMapper.toUserDto(user); 124 | log.info("delete User completed successfully with: {}", kv("id", id)); 125 | return userResponseDto; 126 | } 127 | 128 | /** 129 | * FILE METHODS 130 | */ 131 | 132 | @Autowired 133 | private PlatformTransactionManager transactionManager; 134 | 135 | @Override 136 | public String uploadImage(MultipartFile file, Long id) { 137 | log.info("uploadImage to User started with, {}", 138 | kv("partnerId", id)); 139 | DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); 140 | // definition.setIsolationLevel(TransactionDefinition.PROPAGATION_REQUIRED); 141 | definition.setTimeout(3); 142 | TransactionStatus status = transactionManager.getTransaction(definition); 143 | String fileName = ""; 144 | try { 145 | User user = getUser(id); 146 | if (user.getPhoto() == null) { 147 | fileName = fileServiceImpl.uploadImage(file, imageFolder, true); 148 | user.setPhoto(fileName); 149 | userRepo.save(user); 150 | // if (!fileName.equals("")) throw new RuntimeException("AHAAAAAAAAAAAAAAAAAAA"); 151 | transactionManager.commit(status); 152 | log.info("uploadImage to User completed successfully with {}", 153 | kv("partnerId", id)); 154 | return fileName; 155 | } 156 | } catch (Exception e) { 157 | log.info("Filename: ", fileName); 158 | fileServiceImpl.deleteFile(fileName, imageFolder); 159 | transactionManager.rollback(status); 160 | } 161 | throw new FileCantUploadException(file.getOriginalFilename()); 162 | } 163 | 164 | @Override 165 | @Transactional 166 | public String updateImage(MultipartFile file, Long id) { 167 | log.info("updateImage to User started with, {}", 168 | kv("partnerId", id)); 169 | User user = getUser(id); 170 | deleteFile(user.getPhoto(), imageFolder); 171 | String fileName = fileServiceImpl.uploadImage(file, imageFolder, true); 172 | user.setPhoto(fileName); 173 | userRepo.save(user); 174 | log.info("updateImage to User completed successfully with {}", 175 | kv("partnerId", user)); 176 | return fileName; 177 | } 178 | 179 | @Override 180 | @Transactional 181 | public void deleteUserImage(Long id) { 182 | log.info("deleteUserImage started from User with {}", kv("id", id)); 183 | User user = getUser(id); 184 | if (user.getPhoto() != null) { 185 | fileServiceImpl.deleteFile(user.getPhoto(), imageFolder); 186 | user.setPhoto(null); 187 | userRepo.save(user); 188 | } 189 | log.info("deleteUserImage completed successfully from User with {} ", kv("id", id)); 190 | } 191 | 192 | @Override 193 | public void deleteFile(String fileName, String folder) { 194 | log.info("deleteFile started from User with {}", kv("fileName", fileName)); 195 | fileServiceImpl.deleteFile(fileName, folder); 196 | log.info("deleteFile completed successfully from User with {} ", kv("fileName", fileName)); 197 | } 198 | 199 | @Override 200 | public byte[] getFile(String fileName, String folder) { 201 | log.info("getFile started with {}", kv("fileName", fileName)); 202 | return fileServiceImpl.getFile(fileName, folder); 203 | } 204 | 205 | @Override 206 | @Transactional 207 | public String uploadVideo(MultipartFile file, Long id) { 208 | log.info("uploadVideo to User started with, {}", 209 | kv("partnerId", id)); 210 | User user = getUser(id); 211 | if (user.getVideo() == null) { 212 | String fileName = fileServiceImpl.uploadVideo(file, videoFolder); 213 | user.setVideo(fileName); 214 | userRepo.save(user); 215 | log.info("uploadFile to User completed successfully with {}", 216 | kv("partnerId", id)); 217 | return fileName; 218 | } 219 | throw new FileCantUploadException(file.getOriginalFilename()); 220 | } 221 | 222 | @Override 223 | @Transactional 224 | public String updateVideo(MultipartFile file, Long id) { 225 | log.info("updateVideo to User started with, {}", 226 | kv("partnerId", id)); 227 | User user = getUser(id); 228 | deleteFile(user.getVideo(), videoFolder); 229 | String fileName = fileServiceImpl.uploadVideo(file, videoFolder); 230 | user.setVideo(fileName); 231 | userRepo.save(user); 232 | log.info("updateVideo to User completed successfully with {}", 233 | kv("partnerId", user)); 234 | return fileName; 235 | } 236 | 237 | @Override 238 | @Transactional 239 | public void deleteUserVideo(Long id) { 240 | log.info("deleteUserVideo started from User with {}", kv("id", id)); 241 | User user = getUser(id); 242 | if (user.getPhoto() != null) { 243 | fileServiceImpl.deleteFile(user.getVideo(), videoFolder); 244 | user.setVideo(null); 245 | userRepo.save(user); 246 | } 247 | log.info("deleteUserVideo completed successfully from User with {} ", kv("id", id)); 248 | } 249 | 250 | @SneakyThrows 251 | @Override 252 | @Transactional 253 | public String uploadContractByPin(String dummyPin) { 254 | User user = getUser(1L); 255 | BufferedImage contract = base64ToBufferedImage(getBase64Contract()); 256 | BufferedImage signature = base64ToBufferedImage(getBase64Signature()); 257 | signature = fileUtil.resizeImage(signature, 70, 25); 258 | 259 | BufferedImage combinedImage = new BufferedImage(contract.getWidth(), contract.getHeight(), 260 | BufferedImage.TYPE_INT_ARGB); 261 | Graphics2D g = combinedImage.createGraphics(); 262 | g.drawImage(contract, 0, 0, null); 263 | g.drawImage(signature, 90, 264 | (contract.getHeight() - 40 - signature.getHeight()), null); 265 | g.setPaint(Color.BLACK); 266 | g.setFont(new Font("Serif", Font.ITALIC, 14)); 267 | g.drawString("Sahil Appayev", 60, 82); 268 | g.dispose(); 269 | 270 | log.info("Contract size: {} {}", combinedImage.getWidth(), combinedImage.getHeight()); 271 | log.info("Signature size: {} {}", signature.getWidth(), signature.getHeight()); 272 | 273 | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 274 | ImageIO.write(combinedImage, "PNG", byteArrayOutputStream); 275 | byte[] bytes = byteArrayOutputStream.toByteArray(); 276 | InputStream file = new ByteArrayInputStream(bytes); 277 | String fileName = fileServiceImpl.uploadInputStreamImage(file, imageFolder); 278 | user.setPhoto(fileName); 279 | userRepo.save(user); 280 | return fileName; 281 | } 282 | 283 | @SneakyThrows 284 | private BufferedImage base64ToBufferedImage(String base64) { 285 | base64 = base64.split("[,]")[1]; 286 | byte[] bytes = Base64.decodeBase64(base64); 287 | return ImageIO.read(new ByteArrayInputStream(bytes)); 288 | } 289 | 290 | @Transactional 291 | public String uploadResume(MultipartFile file, Long id) { 292 | log.info("uploadResume to User started with, {}", 293 | kv("id", id)); 294 | User user = getUser(id); 295 | if (user.getVideo() == null) { 296 | String fileName = fileServiceImpl.uploadPdf(file, resumeFolder); 297 | user.setResume(fileName); 298 | userRepo.save(user); 299 | log.info("uploadResume to User completed successfully with {}", 300 | kv("id", id)); 301 | return fileName; 302 | } 303 | throw new FileCantUploadException(file.getOriginalFilename()); 304 | } 305 | 306 | @Override 307 | @Transactional 308 | public String updateResume(MultipartFile file, Long id) { 309 | log.info("updateResume to User started with, {}", 310 | kv("id", id)); 311 | User user = getUser(id); 312 | deleteFile(user.getResume(), resumeFolder); 313 | String fileName = fileServiceImpl.uploadPdf(file, resumeFolder); 314 | user.setResume(fileName); 315 | userRepo.save(user); 316 | log.info("updateResume to User completed successfully with {}", 317 | kv("id", user)); 318 | return fileName; 319 | } 320 | 321 | private User getUser(Long id) { 322 | return userRepo.findById(id).orElseThrow( 323 | () -> new EntityNotFoundException(User.class, id)); 324 | } 325 | 326 | @Override 327 | @Transactional 328 | public Map uploadPhotos(Long id, String[] names, MultipartFile[] files) { 329 | User user = getUser(id); 330 | int i = 0; 331 | for (MultipartFile file : files) { 332 | String uploadImageName = fileServiceImpl.uploadImage(file, imageFolder, false); 333 | user.getPhotos().put(names[i], uploadImageName); 334 | i++; 335 | } 336 | return user.getPhotos(); 337 | } 338 | 339 | } 340 | -------------------------------------------------------------------------------- /src/main/java/com/java/sahil/minio/util/FileUtil.java: -------------------------------------------------------------------------------- 1 | package com.java.sahil.minio.util; 2 | 3 | import com.java.sahil.minio.error.ExtensionNotAcceptableException; 4 | import lombok.RequiredArgsConstructor; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.beans.factory.annotation.Value; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.web.multipart.MultipartFile; 9 | 10 | import javax.validation.constraints.NotNull; 11 | import java.awt.Image; 12 | import java.awt.image.BufferedImage; 13 | import java.io.IOException; 14 | import java.io.InputStream; 15 | import java.net.URLConnection; 16 | import java.util.Date; 17 | 18 | @Slf4j 19 | @Service 20 | @RequiredArgsConstructor 21 | public class FileUtil { 22 | @Value("${file.upload.acceptableVideoExtensions}") 23 | private String[] acceptableVideoExtensions; 24 | @Value("${file.upload.acceptableImageExtensions}") 25 | private String[] acceptableImageExtensions; 26 | @Value("${file.upload.acceptablePdfExtensions}") 27 | private String[] acceptablePdfExtensions; 28 | 29 | private boolean isExtensionAcceptable(String extension, String mediaType) { 30 | if (mediaType.equals("image")) { 31 | for (String s : acceptableImageExtensions) { 32 | if (s.equalsIgnoreCase(extension)) { 33 | return true; 34 | } 35 | } 36 | } else if (mediaType.equals("video")) { 37 | for (String s : acceptableVideoExtensions) { 38 | if (s.equalsIgnoreCase(extension)) { 39 | return true; 40 | } 41 | } 42 | } else if (mediaType.equals("pdf")) { 43 | for (String s : acceptablePdfExtensions) { 44 | if (s.equalsIgnoreCase(extension)) { 45 | return true; 46 | } 47 | } 48 | } 49 | return false; 50 | } 51 | 52 | public String getFileExtensionIfAcceptable(@NotNull MultipartFile file, String mediaType) { 53 | String extension = file.getContentType().split("[/]")[1]; 54 | if (isExtensionAcceptable(extension, mediaType)) { 55 | return extension; 56 | } else { 57 | throw new ExtensionNotAcceptableException(extension); 58 | } 59 | } 60 | 61 | public String getFileExtensionIfAcceptable(String fileName, String mediaType) { 62 | String extension = fileName.split("\\.")[1]; 63 | if (isExtensionAcceptable(extension, mediaType)) { 64 | return extension; 65 | } else { 66 | throw new ExtensionNotAcceptableException(extension); 67 | } 68 | } 69 | 70 | public String generateUniqueName(String extension) { 71 | Date date = new Date(); 72 | return date.getTime() + "." + extension; 73 | } 74 | 75 | public String getFileExtensionFromInputStream(InputStream inputStream) { 76 | String fileExtension = null; 77 | try { 78 | String mimeType = URLConnection.guessContentTypeFromStream(inputStream); 79 | String[] tokens = mimeType.split("[/]"); 80 | fileExtension = tokens[1]; 81 | } catch (IOException ioException) { 82 | log.error("Error occurred: {}", ioException.getMessage()); 83 | } 84 | return fileExtension; 85 | } 86 | 87 | public BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) { 88 | Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_DEFAULT); 89 | BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); 90 | outputImage.getGraphics().drawImage(resultingImage, 0, 0, null); 91 | return outputImage; 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | h2: 3 | console: 4 | enabled: true 5 | jpa: 6 | open-in-view: false 7 | defer-datasource-initialization: true 8 | show-sql: true 9 | servlet: 10 | multipart: 11 | enabled: true 12 | file-size-threshold: 2KB 13 | max-file-size: 500MB 14 | max-request-size: 1000MB 15 | file: 16 | upload: 17 | acceptableVideoExtensions: mp4,mov,avi,wmv 18 | acceptableImageExtensions: jpg,png,jpeg 19 | acceptablePdfExtensions: pdf 20 | 21 | minio: 22 | url: http://127.0.0.1:9000/ 23 | bucket: user 24 | access-key: test 25 | secret-key: test1234 26 | image-folder: profpic/ 27 | video-folder: video/ 28 | resume-folder: resume/ 29 | application: 30 | swagger: 31 | title: MinIo Photo API 32 | description: Spring Boot file uploading with MinIo file storage. 33 | version: 0.0.2 -------------------------------------------------------------------------------- /src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | 2 | ____ _ ____ _ __ __ _ ___ ___ 3 | / ___| _ __ _ __(_)_ __ __ _ | __ ) ___ ___ | |_ | \/ (_)_ __ |_ _/ _ \ 4 | \___ \| '_ \| '__| | '_ \ / _` | | _ \ / _ \ / _ \| __| _____ | |\/| | | '_ \ | | | | | 5 | ___) | |_) | | | | | | | (_| | | |_) | (_) | (_) | |_ |_____| | | | | | | | || | |_| | 6 | |____/| .__/|_| |_|_| |_|\__, | |____/ \___/ \___/ \__| |_| |_|_|_| |_|___\___/ 7 | |_| |___/ 8 | 9 | ${AnsiColor.BRIGHT_RED}:: Running Spring Boot ${spring-boot.version} :: 10 | -------------------------------------------------------------------------------- /src/main/resources/base64Contract.txt: -------------------------------------------------------------------------------- 1 | data:image/jpeg;base64,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AAAAAAAAHiwPVLWqtQBX2CKpaqqlqKpaiqWoqlqKpaiqWoqlqKpaiqWoqlqKpaiqysyUcmzRzlhZran5bitWSIkS2FVruVQdFqil22oq416QLQAAAAAAAAAPFgeqWtVagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHiwPVLX834H6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB+k35sH6TfmwfpN+bB1Tjh/8QALRAAAgIBAwMDAwUBAQEBAAAAAwQBAgAFEhQTFTUGESAwQGAQIiMkUDMhMTL/2gAIAQEAAQUC01FS+n9uSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSztyWduSz1UEQNQ0nxf4P608ppPi/wf1p5TSfF/g/rTymk+L+rM+0KhZ1NRlwiY51jamHVC2YU1dkSbGpMgFOr+6up6g3wOtsUDq17X00jLGs62S8whqEg0lfUy2cDrdrLK61QuIa1VpkevWkcaxsGtrUFqDWL3vpDTJnvUF7i0lXU79cGvjKyLVGwktq44dPrfTqXWxwtOt14SWoXO3qC3IHpPUppddXHZyNY3L6e7ypeYHGsaa0zTS6a3uRb1LUJKPVKrVHrdJU0167f1/WnlNJ8X9aENQWG2ge0E0pgyl0yTqPanNmpaYZl8elsiVZRdZ0+wbMIi05y8oq3A23pfN1B3SeMDTWCv6qLSL9kX0osxp2lnAYelnrp7elXZKvph+nOnG46irC+oautdzTxINkbU0YwSxp5+vOgnsnqOlkI0xpBJFOlGlSqhI1i8bqaQpZTTo0E0Jn00lR6amUJVlLj1TWUiOh7OxxdRTOWt9GNcYNOPCul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3+HH8ED7Zt/gAby7BCxMAEUQAwxAyCxcZdY3WApkWIOUE8iqgcjDhAJhdAAsmxKABXKZrwpRwC6HYAwLmHjhIw0C927hkcKogGkpsxAYRhKZEGh6weoDAtuPclrqdE6LaPWlejTPc8HpgoWSAxcizgoVwpORFZ7aHqmAfPIhvXtBLlFAdnK6MC5KvWoGjoPI/kA+2bftZFrLPyqNGjRo0aNGjRo0aNGjRo0aNGjRo0aMOB/1ZRKE2CDsCwMwgMzDhQ8kOsZh7AvMAcw2g5dIMFihBUZgYkTE7uVAxhOawToZpXpNRBjUKHTgshAeABQcGGHRs2CXwAgUADBIwASaWkbjujTct5wpdp1+7rhVLZEuoYVahes8loCPh0gCAGGsHiAQqoyAxkMhlDkdgYBWRgqG0LNygvXcOv5APtm3/iQfbNv/ABIPtm3/AIkH2zb/AMSDIOAgFA953j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M7x+Z3j8zvH5nePzO8fmd4/M1tCop//aAAwDAQACAAMAAAAQEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMU888888888888888888888888888888888888U888888sw14blJWMtae3u+MAJC6Sj88888888U8+42rICH0u2EyGww8888848wOBsEw2088888U8YIQsiTngQXOPbyK4OoMMRg0xOPgSyS88888U8sMMMMMMMMQGbA8QLSJx8888888888888888U8ElVMwxsAh5L46aeCwwwwtAEIKkjL8888888U8twsHrLIRFH9+Yzj88884ieZMPH0GPdo8888U8tCwbq888888888888888888888888888888U8ymOA588EF6GLZCFH8888888888888888888U8++MwuMMiQyiM8Dbh8888888888888888888U8utfwdowwwwwk5cyIiK+8888888888888888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 -------------------------------------------------------------------------------- /src/main/resources/base64Signature.txt: -------------------------------------------------------------------------------- 1 | data:image/png;base64,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 -------------------------------------------------------------------------------- /src/main/resources/data.sql: -------------------------------------------------------------------------------- 1 | insert into user (name, surname) 2 | values ('Sahil', 'Appayev'); -------------------------------------------------------------------------------- /src/main/resources/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | minio: 4 | image: minio/minio 5 | ports: 6 | - "9000:9000" 7 | - "9001:9001" 8 | environment: 9 | MINIO_ACCESS_KEY: test 10 | MINIO_SECRET_KEY: test1234 11 | command: server --console-address :9001 /data 12 | createbuckets: 13 | image: minio/mc 14 | depends_on: 15 | - minio 16 | entrypoint: > 17 | /bin/sh -c " 18 | /usr/bin/mc alias set myminio http://minio:9000 test test1234; 19 | /usr/bin/mc mb myminio/user; 20 | /usr/bin/mc policy set public myminio/user; 21 | exit 0; 22 | " -------------------------------------------------------------------------------- /src/main/resources/messages.properties: -------------------------------------------------------------------------------- 1 | error.notFound=is not found! 2 | error.extensionNotAcceptable=extension is not acceptable! --------------------------------------------------------------------------------