forked from loafle/openapi-generator-original
[kotlin][client] fix file upload with okhttp (#13435)
* [kotlin][client] fix file upload with okhttp * [kotlin][client] fix file upload with okhttp * [kotlin][client] update sample projects * [kotlin][client] fix file upload with okhttp3 * [kotlin][client] update sample projects
This commit is contained in:
parent
863dbc7c3e
commit
b9d71581dd
@ -116,6 +116,12 @@ import com.squareup.moshi.adapter
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
{{#jvm-okhttp3}}
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
{{/jvm-okhttp3}}
|
||||
{{#jvm-okhttp4}}
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
{{/jvm-okhttp4}}
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -123,27 +129,41 @@ import com.squareup.moshi.adapter
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart({{#jvm-okhttp3}}Headers.of(headers){{/jvm-okhttp3}}{{#jvm-okhttp4}}headers.toHeaders(){{/jvm-okhttp4}},
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
{{#jvm-okhttp3}}
|
||||
val fileMediaType = MediaType.parse(guessContentTypeFromFile(part.body))
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(fileMediaType, part.body)
|
||||
)
|
||||
{{/jvm-okhttp3}}
|
||||
{{#jvm-okhttp4}}
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
{{/jvm-okhttp4}}
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
{{#jvm-okhttp3}}
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(null, parameterToString(part.body))
|
||||
)
|
||||
{{/jvm-okhttp3}}
|
||||
{{#jvm-okhttp4}}
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
{{/jvm-okhttp4}}
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
{{#jvm-okhttp3}}
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
{{/jvm-okhttp3}}
|
||||
{{#jvm-okhttp4}}
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
{{/jvm-okhttp4}}
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -65,6 +65,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -72,22 +73,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(Headers.of(headers),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = MediaType.parse(guessContentTypeFromFile(part.body))
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(fileMediaType, part.body)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(null, parameterToString(part.body))
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -65,6 +65,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -72,22 +73,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(Headers.of(headers),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = MediaType.parse(guessContentTypeFromFile(part.body))
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(fileMediaType, part.body)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(null, parameterToString(part.body))
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -70,6 +70,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -77,22 +78,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -71,6 +71,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -78,22 +79,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ internal open class ApiClient(val baseUrl: String, val client: OkHttpClient = de
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ internal open class ApiClient(val baseUrl: String, val client: OkHttpClient = de
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -65,6 +65,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -72,22 +73,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(Headers.of(headers),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = MediaType.parse(guessContentTypeFromFile(part.body))
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(fileMediaType, part.body)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
Headers.of(partHeaders),
|
||||
RequestBody.create(null, parameterToString(part.body))
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> RequestBody.create(MediaType.parse(mediaType ?: guessContentTypeFromFile(content)), content)
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -69,6 +69,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -76,22 +77,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
@ -68,6 +68,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
|
||||
protected inline fun <reified T> requestBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormDataMediaType ->
|
||||
MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
@ -75,22 +76,24 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(content as Map<String, PartConfig<*>>).forEach { (name, part) ->
|
||||
val contentType = part.headers.remove("Content-Type")
|
||||
val bodies = if (part.body is Iterable<*>) part.body else listOf(part.body)
|
||||
bodies.forEach { body ->
|
||||
val headers = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"" + if (body is File) "; filename=\"${body.name}\"" else "")
|
||||
addPart(headers.toHeaders(),
|
||||
requestSingleBody(body, contentType))
|
||||
if (part.body is File) {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"; filename=\"${part.body.name}\"")
|
||||
val fileMediaType = guessContentTypeFromFile(part.body).toMediaTypeOrNull()
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
part.body.asRequestBody(fileMediaType)
|
||||
)
|
||||
} else {
|
||||
val partHeaders = part.headers.toMutableMap() +
|
||||
("Content-Disposition" to "form-data; name=\"$name\"")
|
||||
addPart(
|
||||
partHeaders.toHeaders(),
|
||||
parameterToString(part.body).toRequestBody(null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}.build()
|
||||
else -> requestSingleBody(content, mediaType)
|
||||
}
|
||||
|
||||
protected inline fun <reified T> requestSingleBody(content: T, mediaType: String?): RequestBody =
|
||||
when {
|
||||
content is File -> content.asRequestBody((mediaType ?: guessContentTypeFromFile(content)).toMediaTypeOrNull())
|
||||
mediaType == FormUrlEncMediaType -> {
|
||||
FormBody.Builder().apply {
|
||||
// content's type *must* be Map<String, PartConfig<*>>
|
||||
|
Loading…
x
Reference in New Issue
Block a user