diff --git a/Deployment/docker-compose.yml b/Deployment/docker-compose.yml index 56da1276c..bc7418e20 100644 --- a/Deployment/docker-compose.yml +++ b/Deployment/docker-compose.yml @@ -269,6 +269,9 @@ services: - JAVA_OPTS=-Xmx256m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044 - SPRING_PROFILES_DEFAULT=docker - CONSUL_HOST=consul + - ROOT_DIR=/storage + volumes: + - $DATA/storage-data:/storage depends_on: - consul deploy: diff --git a/storage/storage-app/src/main/kotlin/co/nilin/opex/storage/app/controller/FileController.kt b/storage/storage-app/src/main/kotlin/co/nilin/opex/storage/app/controller/FileController.kt index a8216d35d..8fbc29995 100644 --- a/storage/storage-app/src/main/kotlin/co/nilin/opex/storage/app/controller/FileController.kt +++ b/storage/storage-app/src/main/kotlin/co/nilin/opex/storage/app/controller/FileController.kt @@ -5,6 +5,7 @@ import co.nilin.opex.storage.app.service.StringToHashService import co.nilin.opex.utility.error.data.OpexError import co.nilin.opex.utility.error.data.OpexException import kotlinx.coroutines.reactive.awaitFirstOrNull +import org.springframework.beans.factory.annotation.Value import org.springframework.http.MediaType import org.springframework.http.ResponseEntity import org.springframework.http.codec.multipart.FilePart @@ -17,27 +18,31 @@ import java.nio.file.Paths import java.util.* @RestController -class FileController(private val storageService: StorageService, private val stringToHashService: StringToHashService) { +class FileController( + private val storageService: StorageService, + private val stringToHashService: StringToHashService, + @Value("\${app.root-dir}") private val rootDir: String +) { data class FileUploadResponse(val path: String) private suspend fun upload(uid: String, file: FilePart?, nameWithoutExtension: String? = null): FileUploadResponse { if (file == null) throw OpexException(OpexError.BadRequest, "File Not Provided") val filename = file.filename() val ext = filename.replace(Regex(".+(?<=\\.)"), "") - if (ext.toLowerCase() !in listOf("jpg", "jpeg", "png", "mp4", "mov", "pdf", "gif")) + if (ext.toLowerCase() !in listOf("jpg", "jpeg", "png", "mp4", "mov")) throw OpexException(OpexError.BadRequest, "Invalid File Format") val uri = if (nameWithoutExtension == null) { "$uid/$filename" } else { "$uid/$nameWithoutExtension.$ext" } - val path = Paths.get("").resolve("/opex-storage/$uri").toString() + val path = Paths.get("").resolve("$rootDir/$uri").toString() storageService.store(path, file) return FileUploadResponse("/$uri") } private suspend fun download(uid: String, filename: String? = null): ResponseEntity { - val path = Paths.get("").resolve("/opex-storage/$uid/$filename") + val path = Paths.get("").resolve("$rootDir/$uid/$filename") if (!storageService.exists(path.toString())) throw OpexException(OpexError.NotFound) val file = storageService.load(path.toString()) val mimeType = URLConnection.getFileNameMap().getContentTypeFor(path.fileName.toString()) diff --git a/storage/storage-app/src/main/resources/application.yml b/storage/storage-app/src/main/resources/application.yml index 4b6ce48e6..d0a341d9e 100644 --- a/storage/storage-app/src/main/resources/application.yml +++ b/storage/storage-app/src/main/resources/application.yml @@ -22,6 +22,7 @@ spring: prefer-ip-address: true app: + root-dir: ${ROOT_DIR} cors: allowed-hosts: https://opex.dev, http://localhost:3000 allowed-patterns: http://192.168.*