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
|
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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
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