当前位置: 首页 > 知识库问答 >
问题:

使用okhttp上传文件

巫马淳
2023-03-14

它应该很简单:我必须发送文件和一些字符串值。但我想不出怎么做。

根据我发现的一些样本,我首先尝试了以下内容:

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
    .addFormDataPart("group", getGroup())
    .addFormDataPart("type", getType())
    .addFormDataPart("entity", Integer.toString(getEntity()))
    .addFormDataPart("reference", Integer.toString(getReference()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
    .build();

它给我一个“400错误请求”错误。

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
    .addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
    .build();
// adds the required authentication token
Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
Response response = client.newCall(request).execute();

我做错了什么?

编辑:顺便说一句,上面的“getfile()”返回一个File对象。其余的参数都是字符串和int。

共有1个答案

梁丘权
2023-03-14

在最初的帖子后,我找到了自己问题的答案。

我将把它留在这里,因为它可能对其他人有用,因为有这样几个okhttp上传示例:

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
        .addFormDataPart("group", getGroup())
        .addFormDataPart("type", getType())
        .addFormDataPart("entity", Integer.toString(getEntity()))
        .addFormDataPart("reference", Integer.toString(getReference()))
        .addFormDataPart("task_file", "file.png", RequestBody.create(MediaType.parse("image/png"), getFile()))
                                                .build();

没有理由将“addPart”与“headers.of”等一起使用,就像在食谱中一样,addFormDataPart可以实现这一目的。

 类似资料:
  • 在Android中使用OKHTTP以多部分方式上传单个大文件(更具体地说,上传到s3)时,我有什么选择?

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 由邮递员生成以下代码: 此请求在服务器上生成一个大小为0 Kb的文件。而且我无法放文件。所以,我必须放一个这样的文件: 但我有一个超时选项。 如何使用这种Rest API放置文件?

  • 正如上面的问题所描述的,我正在尝试将一个文件从okhttp3上传到服务器。 我总是收到‘你没有选择一个文件上传’在我的方法从codeIgniter部分。 这是我的代码 Android: 服务器代码: 我做错了什么?谢谢!

  • 我试图实现一个进度条来指示一个多部分文件上传的进度。 有人能举个例子说明我会怎么做吗?

  • 本文向大家介绍Android使用OKHttp库实现视频文件的上传到服务器功能,包括了Android使用OKHttp库实现视频文件的上传到服务器功能的使用技巧和注意事项,需要的朋友参考一下 1 服务器接口简介 此处我使用的服务器接口是使用Flask编写,具体实现代码: 2 Android端代码实现 代码分三部分: 分别是xml布局文件,Activity类,和Okhttp网络通信类。 2.1 xml布