我喜欢重新编码我的项目并使用 okHttp 而不是 Android 中实现的默认 HttpClient。
我已经下载了 okhttp-main 版本的最新源代码。
现在我找到了一些如何创建和构建 POST 请求的示例。
现在是我的问题。我想创建一个 RequestBody 来保存多个数据(字符串、文件等),但我无法直接分配它们。
意味着 RequestBuilder 必须经过不同的循环才能添加数据。
OkHTTP RequestBody 似乎立即需要数据,如示例中所列https://github.com/square/okhttp/wiki/Recipes
当我想尝试类似的事情时
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM);
for (Object aMData : dataClass.getData().entrySet()) {
Map.Entry mapEntry = (Map.Entry) aMData;
String keyValue = (String) mapEntry.getKey();
String value = (String) mapEntry.getValue();
requestBody.addPart(keyValue, value);
}
for (DataPackage dataPackage : dataClass.getDataPackages()) {
requestBody.addPart("upfile[]", dataPackage.getFile());
}
requestBody.build();
它失败是因为 build() 本身创建了 RequestBody。之前它只是一个 MultipartBuilder()。如果我尝试将类型强制为 RequestBody,它将无法编译/运行。
那么,在创建 MultiPartBuilder 并添加数据和字符串后添加这些数据的正确方法是什么?
使用 OkHttp 分段上传文件
private static final String IMGUR_CLIENT_ID = "...";
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
// Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"title\""),
RequestBody.create(null, "Square Logo"))
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"image\""),
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();
Request request = new Request.Builder()
.header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
.url("https://api.imgur.com/3/image")
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)