java - 如何在 OKhttp 中使用多部分文件上传请求发送正文参数

标签 java android okhttp

我正在尝试使用 okhttp 中的多部分请求上传文件。 使用以下代码。

public static Boolean uploadFile(String serverURL, File file) {
    try {

        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addFormDataPart("file", file.getName(),
                    RequestBody.create(MediaType.parse("text/csv"), file))
                .addFormDataPart("some-field", "some-value")
                .build();

        Request request = new Request.Builder()
                .url(serverURL)
                .post(requestBody)
                .build();

        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Request request, IOException e) {
                // Handle the error
            }

            @Override
            public void onResponse(Response response) throws IOException {
                if (!response.isSuccessful()) {
                    // Handle the error
                }
                // Upload successful
            }
        });

        return true;
    } catch (Exception ex) {
        // Handle the error
    }
    return false;
}

这是工作文件。

我的问题是 - 我还想在正文参数中发送一些键值对,但这在请求中造成了问题。

我正在使用以下代码在多部分请求中附加键值正文参数。

FormBody.Builder formBodyBuilder = new FormBody.Builder();
formBodyBuilder.add("name", "Mac");
requestBody.addPart(formBodyBuilder.build());

但它正在制造问题。 任何帮助将不胜感激。谢谢

最佳答案

我正在使用 Okhttp3 执行此操作并且工作正常:

MediaType MEDIA_TYPE = MediaType.parse(MIME_TYPE);
        MultipartBody.Builder builder = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("type", stringsToPost[0])
                ...
                .addFormDataPart("file", file.getName(), RequestBody.create(MEDIA_TYPE, file));

关于java - 如何在 OKhttp 中使用多部分文件上传请求发送正文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37384963/

相关文章:

java - 如何将新的依赖项插入 Gradle 项目?

java - Eclipse 合并问题与 Android (Java) 项目

android - Android 6 上的 Retrofit + Robospice native 崩溃 - 致命信号 11 (SIGSEGV),代码 1

android - 当我在改造中重定向时如何包含标题

java - 解析作为查询参数传递给 REST API 的不同日期的标准方法是什么?

java - 在 Lucene 中获取术语频率

java - 如何解决填充不良的问题

android - 从 Android 到 ASP.Net 页面的 HttpPost

android - 如何在OkHttp中拦截请求?

java - 如何在使用 com.sun.org.apache.xerces.internal.parsers.SAXParser 的 SAXBuilder 中禁用 XML 外部实体 (XEE) 处理