add resource and FileSystemResource

develop
Timo Bryant 2023-12-22 00:57:49 +01:00
parent d973262dbd
commit 78af3f0d50
4 changed files with 59 additions and 4 deletions

View File

@ -0,0 +1,19 @@
package de.itkl.io.implementation
import de.itkl.io.interfaces.Resource
import io.ktor.http.*
import java.io.File
import java.io.InputStream
class FileSystemResource(private val file: File) : Resource() {
override val filename: String
get() = file.name
override val contentType: ContentType
get() = ContentType.fromFilePath(file.path).first()
override val length: Long
get() = file.length()
override fun doRead(): InputStream {
return file.inputStream()
}
}

View File

@ -1,11 +1,24 @@
package de.itkl.io.interfaces package de.itkl.io.interfaces
import io.ktor.http.* import io.ktor.http.*
import org.koin.core.component.KoinComponent
import org.koin.core.component.get
import org.koin.core.qualifier.named
import java.io.InputStream import java.io.InputStream
import java.io.InputStreamReader import java.io.InputStreamReader
interface Resource { abstract class Resource : KoinComponent {
val filename: String abstract val filename: String
val contentType: ContentType abstract val contentType: ContentType
fun read(): InputStream abstract val length: Long?
protected abstract fun doRead(): InputStream
fun read(): InputStream {
return length?.let { length ->
get<ResourceReadDecorator>().decorate(
length = length,
read()
)
} ?: read()
}
} }

View File

@ -0,0 +1,15 @@
package de.itkl.io.interfaces
import java.io.InputStream
interface ResourceReadDecorator {
fun decorate(
length: Long,
inputStream: InputStream): InputStream
}
class NoopResourceReadDecorator : ResourceReadDecorator {
override fun decorate(length: Long, inputStream: InputStream): InputStream {
return inputStream
}
}

View File

@ -1 +1,9 @@
package de.itkl.io package de.itkl.io
import de.itkl.io.interfaces.NoopResourceReadDecorator
import de.itkl.io.interfaces.ResourceReadDecorator
import org.koin.dsl.module
val ioModule = module {
single<ResourceReadDecorator> { NoopResourceReadDecorator() }
}