dave08
08/01/2018, 7:32 AMget
?Deactivated User
08/01/2018, 7:32 AMdave08
08/01/2018, 7:35 AMDeactivated User
08/01/2018, 7:36 AMdave08
08/01/2018, 7:36 AMsuspend fun ApplicationCall.receiveFile(uploadDir: String): File =
receiveMultipart().readPart().let {
if (it is PartData.FileItem) {
val ext = File(it.originalFileName).extension
val uploadName = "upload-${System.currentTimeMillis()}-${it.originalFileName!!.hashCode()}.$ext"
File(uploadDir, uploadName).also { file ->
withContext(CommonPool) {
it.streamProvider().use { its -> file.outputStream().buffered().use { its.copyToSuspend(it) } }
}
}
} else error("Error retreiving upload")
}
dave08
08/01/2018, 7:37 AMDeactivated User
08/01/2018, 7:37 AMDeactivated User
08/01/2018, 7:42 AMsuspend fun HttpClient.getAsTempFile(url: String, callback: suspend (file: File) -> Unit) {
val file = getAsTempFile(url)
try {
callback(file)
} finally {
file.delete()
}
}
suspend fun HttpClient.getAsTempFile(url: String): File {
val file = File.createTempFile("ktor", "http-client").apply { deleteOnExit() }
val call = call {
url(URL(url))
method = HttpMethod.Get
}
call.response.content.copyAndClose(file.writeChannel())
return file
}
Deactivated User
08/01/2018, 7:43 AMdave08
08/01/2018, 7:44 AMdave08
08/01/2018, 8:07 AMcopyAndClose
reads everything to memory before it writes to disk?e5l
08/01/2018, 8:12 AMByteChannel
as bufferdave08
08/01/2018, 8:13 AMdave08
08/01/2018, 8:15 AM<https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=452787>
Deactivated User
08/01/2018, 8:19 AMDeactivated User
08/01/2018, 8:38 AMDeactivated User
08/01/2018, 8:39 AMDeactivated User
08/01/2018, 8:39 AMe5l
08/01/2018, 8:39 AMHttpRedirect
feature from ktorDeactivated User
08/01/2018, 8:40 AMfun main(args: Array<String>) {
runBlocking {
val client = HttpClient(Apache.config {
followRedirects = true
})
val file = client.getAsTempFile("<https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=452787>")
println(file.readBytes().size)
}
}
suspend fun HttpClient.getAsTempFile(url: String, callback: suspend (file: File) -> Unit) {
val file = getAsTempFile(url)
try {
callback(file)
} finally {
file.delete()
}
}
suspend fun HttpClient.getAsTempFile(url: String): File {
val file = File.createTempFile("ktor", "http-client").apply { deleteOnExit() }
val call = call {
url(URL(url))
method = HttpMethod.Get
}
println(call.response.status)
call.response.content.copyAndClose(file.writeChannel())
return file
}
Deactivated User
08/01/2018, 8:40 AMDeactivated User
08/01/2018, 8:40 AMdave08
08/01/2018, 8:41 AMDeactivated User
08/01/2018, 8:41 AMDeactivated User
08/01/2018, 8:41 AMdave08
08/01/2018, 8:43 AMdave08
08/01/2018, 8:44 AMdave08
08/01/2018, 8:47 AMDeactivated User
08/01/2018, 9:03 AMfun main(args: Array<String>) {
runBlocking {
val client = HttpClient(Apache) {
install(HttpRedirect) {
maxJumps = 20
}
}
val file = client.getAsTempFile("<https://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=452787>")
println(file.readBytes().size)
}
}
data class HttpClientException(val response: HttpResponse) : IOException("HTTP Error ${response.status}")
suspend fun HttpClient.getAsTempFile(url: String, callback: suspend (file: File) -> Unit) {
val file = getAsTempFile(url)
try {
callback(file)
} finally {
file.delete()
}
}
suspend fun HttpClient.getAsTempFile(url: String): File {
val file = File.createTempFile("ktor", "http-client").apply { deleteOnExit() }
val call = call {
url(URL(url))
method = HttpMethod.Get
}
if (!call.response.status.isSuccess()) {
throw HttpClientException(call.response)
}
call.response.content.copyAndClose(file.writeChannel())
return file
}
dave08
08/01/2018, 9:23 AMDeactivated User
08/01/2018, 10:18 AM