gpt4 book ai didi

android - 如何发送带有 json 多部分正文和图像文件的 OkHttp post 请求

转载 作者:太空狗 更新时间:2023-10-29 15:28:00 31 4
gpt4 key购买 nike

我想发送一个 post 请求,我必须在其中发送一些数据,其中包括 json 格式的数据和一个图像文件。

当我单独发送请求时,它工作正常,但不能一起工作。

请在这里帮助我,如何实现这一目标。

我用来发送json格式数据的是什么:

Map<String, String> map = new HashMap<>();
postParam.put("title", "XYZ");
postParam.put("isGroup", "true");
postParam.put("ownerId", "123");
JSONArray jsonArray = new JSONArray();
jsonArray.put("1");
jsonArray.put("2");
jsonArray.put("2");
postParam.put("groupMembers", jsonArray.toString());
MediaType JSON = MediaType.parse("application/json");
JSONObject parameter = new JSONObject(postParam);
RequestBody body = RequestBody.create(JSON, parameter.toString());
Request request = new Request.Builder()
.url(postUrl)
.addHeader("content-type", "application/json; charset=utf-8")
.post(body)
.build();

当我没有使用该文件时,它工作正常。但是我必须通过此请求将图像文件作为多部分数据发送,然后是如何发送。

最佳答案

Kotlin 用法

尝试使用这段代码。它适用于我的情况。让我知道它是否有效并使其成为正确答案(:

    private const val CONNECT_TIMEOUT = 15L
private const val READ_TIMEOUT = 15L
private const val WRITE_TIMEOUT = 15L

private fun performPostRequest(urlString: String, jsonString: String, image: File, token: String): String? {
/* https://github.com/square/okhttp#requirements
OkHttp uses your platform's built-in TLS implementation.
On Java platforms OkHttp also supports Conscrypt,
which integrates BoringSSL with Java.
OkHttp will use Conscrypt if it is the first security provider: */
Security.insertProviderAt(Conscrypt.newProvider(), 1)

return try {
val client = OkHttpClient.Builder()
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.build()

val body: RequestBody = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("parameterNameInServerSideJSON", jsonString)
.addFormDataPart("parameterNameInServerSideImage", "test.jpeg", image.asRequestBody("image/jpg".toMediaTypeOrNull()))
.build()

val request = Request.Builder()
.url(URL(urlString))
.header("Authorization", token) // in case you use authorization
.post(body)
.build()

val response = client.newCall(request).execute()
response.body?.string()
}
catch (e: IOException) {
e.printStackTrace()
null
}
}

我用过这个版本的okhttp

    implementation 'com.squareup.okhttp3:okhttp:4.3.1'

关于android - 如何发送带有 json 多部分正文和图像文件的 OkHttp post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49685527/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com