add resource and FileSystemResource
parent
d973262dbd
commit
78af3f0d50
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,24 @@
|
|||
package de.itkl.io.interfaces
|
||||
|
||||
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.InputStreamReader
|
||||
|
||||
interface Resource {
|
||||
val filename: String
|
||||
val contentType: ContentType
|
||||
fun read(): InputStream
|
||||
abstract class Resource : KoinComponent {
|
||||
abstract val filename: String
|
||||
abstract val contentType: ContentType
|
||||
abstract val length: Long?
|
||||
|
||||
protected abstract fun doRead(): InputStream
|
||||
fun read(): InputStream {
|
||||
return length?.let { length ->
|
||||
get<ResourceReadDecorator>().decorate(
|
||||
length = length,
|
||||
read()
|
||||
)
|
||||
} ?: read()
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +1,9 @@
|
|||
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() }
|
||||
}
|
||||
Loading…
Reference in New Issue