mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-09-12 20:03:08 +00:00
improvements in ktor client-server files handling
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
package dev.inmo.micro_utils.ktor.client
|
||||
|
||||
import dev.inmo.micro_utils.common.FileName
|
||||
import dev.inmo.micro_utils.common.MPPFile
|
||||
import dev.inmo.micro_utils.ktor.common.LambdaInputProvider
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.http.Headers
|
||||
import io.ktor.utils.io.core.Input
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
import kotlinx.serialization.StringFormat
|
||||
import kotlinx.serialization.json.Json
|
||||
@@ -20,6 +22,8 @@ data class UniUploadFileInfo(
|
||||
* @param data [Map] where keys will be used as names for multipart parts and values as values. If you will pass
|
||||
* [dev.inmo.micro_utils.common.MPPFile] (File from JS or JVM platform). Also you may pass [UniUploadFileInfo] as value
|
||||
* in case you wish to pass other source of multipart binary data than regular file
|
||||
*
|
||||
* @see dev.inmo.micro_utils.ktor.server.handleUniUpload
|
||||
*/
|
||||
expect suspend fun <T> HttpClient.uniUpload(
|
||||
url: String,
|
||||
@@ -29,3 +33,73 @@ expect suspend fun <T> HttpClient.uniUpload(
|
||||
stringFormat: StringFormat = Json,
|
||||
onUpload: OnUploadCallback = { _, _ -> }
|
||||
): T?
|
||||
|
||||
/**
|
||||
* Additional variant of [uniUpload] which will unify sending of some [MPPFile] with the server
|
||||
*
|
||||
* @see dev.inmo.micro_utils.ktor.server.uniloadMultipartFile
|
||||
*/
|
||||
suspend fun <T> HttpClient.uniUpload(
|
||||
url: String,
|
||||
file: MPPFile,
|
||||
resultDeserializer: DeserializationStrategy<T>,
|
||||
additionalData: Map<String, Any> = emptyMap(),
|
||||
headers: Headers = Headers.Empty,
|
||||
stringFormat: StringFormat = Json,
|
||||
onUpload: OnUploadCallback = { _, _ -> }
|
||||
): T? = uniUpload(
|
||||
url,
|
||||
additionalData + ("bytes" to file),
|
||||
resultDeserializer,
|
||||
headers,
|
||||
stringFormat,
|
||||
onUpload
|
||||
)
|
||||
|
||||
/**
|
||||
* Additional variant of [uniUpload] which will unify sending of some [UniUploadFileInfo] with the server
|
||||
*
|
||||
* @see dev.inmo.micro_utils.ktor.server.uniloadMultipartFile
|
||||
*/
|
||||
suspend fun <T> HttpClient.uniUpload(
|
||||
url: String,
|
||||
info: UniUploadFileInfo,
|
||||
resultDeserializer: DeserializationStrategy<T>,
|
||||
additionalData: Map<String, Any> = emptyMap(),
|
||||
headers: Headers = Headers.Empty,
|
||||
stringFormat: StringFormat = Json,
|
||||
onUpload: OnUploadCallback = { _, _ -> }
|
||||
): T? = uniUpload(
|
||||
url,
|
||||
additionalData + ("bytes" to info),
|
||||
resultDeserializer,
|
||||
headers,
|
||||
stringFormat,
|
||||
onUpload
|
||||
)
|
||||
|
||||
/**
|
||||
* Additional variant of [uniUpload] which will unify sending of some [UniUploadFileInfo] (built from [fileName],
|
||||
* [mimeType] and [inputAllocator]) with the server
|
||||
*
|
||||
* @see dev.inmo.micro_utils.ktor.server.uniloadMultipartFile
|
||||
*/
|
||||
suspend fun <T> HttpClient.uniUpload(
|
||||
url: String,
|
||||
fileName: FileName,
|
||||
mimeType: String,
|
||||
inputAllocator: LambdaInputProvider,
|
||||
resultDeserializer: DeserializationStrategy<T>,
|
||||
additionalData: Map<String, Any> = emptyMap(),
|
||||
headers: Headers = Headers.Empty,
|
||||
stringFormat: StringFormat = Json,
|
||||
onUpload: OnUploadCallback = { _, _ -> }
|
||||
): T? = uniUpload(
|
||||
url,
|
||||
UniUploadFileInfo(fileName, mimeType, inputAllocator),
|
||||
resultDeserializer,
|
||||
additionalData,
|
||||
headers,
|
||||
stringFormat,
|
||||
onUpload
|
||||
)
|
||||
|
Reference in New Issue
Block a user