diff --git a/.env b/.env index afb7afc..0d8bd66 100644 --- a/.env +++ b/.env @@ -11,3 +11,4 @@ GIF_TEST_OBJECT=100.gif PDF_TEST_OBJECT=100.pdf ZIP_TEST_OBJECT=100.zip BIN_TEST_OBJECT=100.bin +SVG_TEST_OBJECT=100.svg diff --git a/README.md b/README.md index a37023d..d56aa02 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ repositories { } // Append dependency -implementation("com.icerockdev:storage-service:0.9.0") +implementation("com.icerockdev:storage-service:0.10.0") ```` ## Library usage diff --git a/storage-service/build.gradle.kts b/storage-service/build.gradle.kts index 1af5249..8ab2cd5 100644 --- a/storage-service/build.gradle.kts +++ b/storage-service/build.gradle.kts @@ -17,7 +17,7 @@ apply(plugin = "java") apply(plugin = "kotlin") group = "com.icerockdev" -version = "0.9.0" +version = "0.10.0" val sourcesJar by tasks.registering(Jar::class) { archiveClassifier.set("sources") @@ -78,7 +78,7 @@ publishing { developers { developer { id.set("YokiToki") - name.set("Stanislav") + name.set("Stanislav Karakovskii") email.set("skarakovski@icerockdev.com") } diff --git a/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/S3StorageImpl.kt b/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/S3StorageImpl.kt index 70bbc3e..eb0b762 100644 --- a/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/S3StorageImpl.kt +++ b/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/S3StorageImpl.kt @@ -222,7 +222,7 @@ class S3StorageImpl(private val client: S3Client, private val preSigner: S3Presi .key(key) .acl(ObjectCannedACL.PUBLIC_READ) .contentEncoding("UTF-8") - .contentType(MimeTypeDetector.detect(file.inputStream).toString()) + .contentType(file.contentType ?: MimeTypeDetector.detect(file.inputStream).toString()) .metadata(metadata ?: emptyMap()) .contentLength(file.size) .build() diff --git a/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/dto/FileObjectDto.kt b/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/dto/FileObjectDto.kt index 8f1a372..78ac76e 100644 --- a/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/dto/FileObjectDto.kt +++ b/storage-service/src/main/kotlin/com/icerockdev/service/storage/s3/dto/FileObjectDto.kt @@ -4,5 +4,6 @@ import java.io.BufferedInputStream data class FileObjectDto( val inputStream: BufferedInputStream, - val size: Long + val size: Long, + val contentType: String? = null, ) diff --git a/storage-service/src/test/kotlin/S3StorageTest.kt b/storage-service/src/test/kotlin/S3StorageTest.kt index 9ad801e..490f905 100644 --- a/storage-service/src/test/kotlin/S3StorageTest.kt +++ b/storage-service/src/test/kotlin/S3StorageTest.kt @@ -277,6 +277,44 @@ class S3StorageTest { } } + @Test + fun testForceFileSizeAndType() { + // init storage + if (!storage.bucketExist(bucketName)) { + storage.createBucket(bucketName) + } + + val (svgFileName, svgStream) = getFile(FileType.SVG) + val mimeType = "image/svg+xml" + val fileSize = svgStream.available().toLong() + + // Check wrong cases + assertFalse(storage.objectExists(bucketName, svgFileName)) + + // Put object to storage + assertTrue( + storage.put( + bucketName, svgFileName, FileObjectDto( + inputStream = svgStream.buffered(), + size = fileSize, + contentType = mimeType + ) + ) + ) + + // Check object exist + assertTrue(storage.objectExists(bucketName, svgFileName)) + + val svgObject = storage.get(bucketName, svgFileName) + + assertEquals(mimeType, svgObject?.response()?.contentType()) + assertEquals(fileSize, svgObject?.response()?.contentLength()) + + assertTrue { + storage.deleteBucketWithObjects(bucketName) + } + } + @Test fun testMetadata() { // init storage @@ -565,6 +603,7 @@ class S3StorageTest { FileType.PDF -> dotenv["PDF_TEST_OBJECT"] ?: throw S3StorageException("PDF File not found") FileType.ZIP -> dotenv["ZIP_TEST_OBJECT"] ?: throw S3StorageException("ZIP File not found") FileType.BIN -> dotenv["BIN_TEST_OBJECT"] ?: throw S3StorageException("BIN File not found") + FileType.SVG -> dotenv["SVG_TEST_OBJECT"] ?: throw S3StorageException("SVG File not found") } return key to (classLoader.getResourceAsStream(fileName) ?: throw S3StorageException("File not readable")) @@ -576,7 +615,8 @@ class S3StorageTest { PNG, PDF, ZIP, - BIN; + BIN, + SVG; } @Throws(IOException::class) diff --git a/storage-service/src/test/resources/100.svg b/storage-service/src/test/resources/100.svg new file mode 100644 index 0000000..f249575 --- /dev/null +++ b/storage-service/src/test/resources/100.svg @@ -0,0 +1,6 @@ + + + + 100x100 + +