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

使用改型1.8.0的多部分请求不起作用

狄灵均
2023-03-14

我有像4天,试图提出一个多部分的请求使用改型1.8.0在android与任何成功。我的界面如下所示

@Multipart
@POST("/posts/add.json") 
void addComment(
  @Part("id") String id,
  @Part("post[body]") String body,
  @Part("post[attachment]") TypedFile attachment,
  Callback<Map<String, String>> callback );
Parameters: {"id"=># <File:/var/folders/z0/0ggjvvfj4t1fdsvbxf3lc9pw0000gn/T/RackMultipart9853-0>, "post"=>{"body"=>#<File:/var/folders/z0/0ggjvvfj4t1fdsvbxf3lc9pw0000gn/T/RackMultipart9853-1>, "attachment"=>#<File:/var/folders/z0/0ggjvvfj4t1fdsvbxf3lc9pw0000gn/T/RackMultipart9853-2>}, "controller"=>"posts", "action"=>"add", "format"=>"json"}
 02-06 15:01:16.213    32545-822/com.myapp D/Retrofit﹕ --fe41634b-6826-4ee4-95cb-65efb0ca66c2
Content-Disposition: form-data; name="id"
Content-Type: text/plain; charset=UTF-8
Content-Length: 3
Content-Transfer-Encoding: binary
189
--fe41634b-6826-4ee4-95cb-65efb0ca66c2
Content-Disposition: form-data; name="post[body]"
Content-Type: text/plain; charset=UTF-8
Content-Length: 4
Content-Transfer-Encoding: binary
test
--fe41634b-6826-4ee4-95cb-65efb0ca66c2
Content-Disposition: form-data; name="post[attachment]"; filename="IMG_20140203_144358.jpg"
Content-Type: image/jpg
Content-Length: 1615460
Content-Transfer-Encoding: binary
����/�Exif����MM��*���������
Content-Disposition: form-data; name="id"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

Content-Disposition: form-data; name=“post[body]"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

Content-Disposition: form-data; name=“post[attachment]"; filename="images.jpg"
Content-Type: image/jpg
Content-Transfer-Encoding: binary

最后,我决定这样做,其实我的答案很接近@lazypig,这是一个很好的指导方针

我唯一改变的是他的类“ByteArrayTypedOutput”

我创建了一个名为“MultipartTypedOutputCustom”的类http://pastie.org/10549360

@POST("/posts/add.json")
    void addComment(@Body MultipartTypedOutputCustom parts,
                    Callback<Map<String, String>> callback);
//Properties
private PostsRetrofitAPI mApi;
...

    @Override
        public void addComment(ServiceResponseHandler<Map<String, String>> handler, String id, String body, TypedFile attachment) {
           MultipartTypedOutputCustom parts = new MultipartTypedOutputCustom();
           parts.addPart("id", new TypedString(id));
           parts.addPart("post[body]", new TypedString(body));
           parts.addPart("post[attachment]", attachment);
    objectRetrofitCallback= new ObjectRetrofitCallback(handler, ServerError.class, ClientError.class);
            mApi.addComment(parts, objectRetrofitCallback);
        }

共有1个答案

谷梁昊空
2023-03-14

如果您在http://square.github.io/retrofit/上看到这些示例,那么“id”和“part[body]”参数的对象类型必须是TypedString而不是string。TypedString设置适当的MIME类型,并将其转换为字节:

https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit/mime/typedstring.java

 类似资料:
  • 问题内容: 我用, Spring Framework 4.0.0发布(GA) Spring Security 3.2.0发布(GA) Struts 2.3.16 在其中,我使用内置的安全令牌来防御CSRF攻击。 Struts表单如下所示。 生成的HTML代码如下。 除非请求是多部分的,否则在此情况下,请求以状态码403结束,这可以很好地工作。 HTTP状态 403-在请求参数标头’X-CSRF-T

  • null 其中,我使用内置的安全令牌来防范CSRF攻击。 Struts表单如下所示。 生成的HTML代码如下所示。 文件如下所示。 那么,当请求是多部分的时候,在哪里寻找这个令牌呢?(这应该与Struts无关。) 的实现可以在前面的问题中找到,如果需要的话。

  • 问题内容: 这并不是一个真正的问题,但是,我想在这里共享我的一些工作代码,以供您在需要时参考。 众所周知,自API22起已弃用该方法,并自API23起将其完全删除。目前,我们无法再在Android Developer上访问HttpEntity Reference(404)。因此,以下是我在带有Volley且没有HttpEntity的POST Multipart Request中工作的示例代码。工作

  • 我想用Spring MVC发布一个包含一些JSON数据的文件。所以我开发了一个rest服务作为

  • 我正在使用Multipart执行帖子类型请求。问题是因为我一直收到两个错误 1) 500 2) 422不可处理实体 Api仅接受音乐文件。因此,我添加了一个默认文件,以避免不断选择新文件 和我的界面 如果有任何帮助,我将不胜感激。 我发现它将文件作为对象通过Reform2发送到服务器

  • 这是我得到的错误: 通用域名格式。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第1列路径处为字符串$ 我从邮递员那里得到的JSON回复: 这就是我如何响应rest API(使用slim2框架)的响应: 回声响应方法: 调用API的方法: APIServie界面: 我如何获得实例: 我发布所有这些