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

如何在改装2.2.0中在一个请求中发布正文和多部分数据

邢财
2023-03-14

我试图在同一个API请求中发布正文和部分数据

如下所示

@Multipart
@POST("AccountService/MultipartProfileImageUpload")
Call<String> updateProfilePic(@Body UserIdCredentials userIdCredentials,@Part MultipartBody.Part file);

但它不起作用,我出错了

@正文参数不能与窗体或多部分编码一起使用。(参数#1)

完成错误日志

07-31 05:01:01.644 6315-6315/android.os.E/AndroidRuntime: FATAL EXCEPTION: main Process:ooper.loop, PID: 6315ooper.java:135RuntimeException:失败交付结果ResultInfo{who=android: fra片段: 1,请求=3,结果=-1, data=Intent{(有额外功能)}}到活动{android.app.}:hread.mainIllegalArgumentException:@body参数不能与表单或多部分编码一起使用。(参数#1)方法ApiIhread.java:5343ProfilePic atjava.lang.reflect.ActivityTethod.invoke结果(ActivityTjava.lang.reflect.)atethod.invokeActivityTethod.java:372SendResult(ActivityThread.java:3702)atandroid.app.ActivityThread.access1300美元(ActivityThread.java:155)atandroid.app.ActivityThread$H. handleMessage(ActivityThread.java:1366)atandroid.os.Handler.dispatch消息(Handler.java:102)atcom.orbiosolutions.yabeeeLcom.orbiosolutions.yabeee(Ljava.lang.)atcom.orbiosolutions.yabeee/com.orbiosolutions.yabeee.Activities.HomeActivityActivityTjava.lang.(ActivityTnterface.update)atandroid.app.Mhread.deliver(Native Method)athread.java:3659Mandroid.app.(Mhread.handle)ZygoteInit. main(ZygoteInit. java: 700)由:java. lang引起。IllegalArgumentException:@主体参数不能与表单或多部分编码一起使用。(参数#1)用于改造2时的方法ApiInterface. updateProfilePic。改造2时的ServiceMethod$Builder. method Error(ServiceMethod. java: 752)。改造2时的ServiceMethod$Builder. method Error(ServiceMethod. java: 743)。改造2时的ServiceMethod$Builder.参数错误(ServiceMethod. java: 761)。改造2时的ServiceMethod$Builder. parseParameterAnnoation(ServiceMethod. java: 701)。改造2时的ServiceMethod$Builder. parseParameter(ServiceMethod. java: 336)。改造2时的ServiceMethod$Builder. build(ServiceMethod. java: 204)。改造服务

请找个人帮我修一下

共有3个答案

万俟均
2023-03-14

使用以下代码:

接口:

 @Multipart
@POST("/ws_services.php?action=imageupload")
public void imageupload(@Part("image") TypedFile file, Callback<Example> callback);

活动Java语言

                 TypedFile typedFile = new TypedFile("image/*", new File(file.getAbsolutePath()));

                    ApiHandler.getApiService().imageupload(typedFile, new Callback<Example>() {
                        @Override
                        public void success(Example example, Response response) {
                            try {
                                String status = example.getSuccess();
                                if (status.equals("1"))
                                {
                                    Toast.makeText(getApplication(),example.getMessage(),Toast.LENGTH_SHORT).show();

                                }
                                else
                                {
                                    Toast.makeText(getApplication(),example.getMessage(),Toast.LENGTH_SHORT).show();
                                }
                            } catch (Exception e) {

                                Log.e("status", "0");
                            }
                        }

                        @Override
                        public void failure(RetrofitError error) {
                            Log.e("retrofit error log", error.toString());
                        }
                    });
龙志勇
2023-03-14

贴这个

@Multipart
@POST("AccountService/MultipartProfileImageUpload")Call<String> 
updateProfilePic(@Body UserIdCredentials 
userIdCredentials,@Part MultipartBody.Part file);

到这个

@Multipart
@POST("AccountService/MultipartProfileImageUpload")Call<String> 
updateProfilePic(@part("params") UserIdCredentials 
userIdCredentials,@Part MultipartBody.Part file);

并在服务器端将请求正文作为参数获取

景令秋
2023-03-14

根据这个答案,我做了这样的修改,效果很好。

请求

RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file);
        MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
        MultipartBody.Part id = MultipartBody.Part.createFormData("userId", userId);
        //Creating a rest adapter
        ApiInterface apiService =
                ApiClient.getClient().create(ApiInterface.class);

        Call<ProfilePicUpdateResponse> call = apiService.updateProfilePic(id,fileToUpload);
        call.enqueue(new Callback<ProfilePicUpdateResponse>() {
            @Override
            public void onResponse(Call<ProfilePicUpdateResponse> call, Response<ProfilePicUpdateResponse> response) {

                loading.dismiss();
                if (response.isSuccessful()) {
                    Log.e("Success", new Gson().toJson(response.body()));
                }
                else
                {
                    loading.dismiss();
                    csActivity.showMsg(getResources().getString(R.string.something_error));
                }
            }

            @Override
            public void onFailure(Call<ProfilePicUpdateResponse> call, Throwable t) {

                loading.dismiss();
                Log.d("=========>>", t.getMessage().toString());
                Log.d("============>>>", "Failure");
            }
        });

接口类

 @Multipart
    @POST("AccountService/MultipartProfileImageUpload")
    Call<ProfilePicUpdateResponse> updateProfilePic(@Part MultipartBody.Part userId, @Part MultipartBody.Part file);
 类似资料:
  • 在我正在开发的React web应用程序中,有一个包含一些用户数据的文件上传部分。然而,当我试图上传文件时,服务器抛出以下错误。 组织。阿帕奇。公猫util。http。文件上传。FileUploadException:请求被拒绝,因为找不到多部分边界 反应侧 我的Spring Boot控制器如下所示。

  • 我使用Jhipster,这是一个控制器方法: 控制器: 本质上,我想发布一个文件和一个json对象。 请求负载的外观如下: 这是Spring Boot日志消息: 已解决的由处理程序执行引起的异常:org.springframework.web.multipart.support.MissingServletRequestPartException:所需的请求部分“file”不存在 将content

  • 这个问题以前可能有人问过,但没有,没有得到明确的回答。具体如何将原始的整个JSON发布到一个修改请求的主体中? 在这里见类似的问题。或者这个答案是正确的,它必须是表单url编码并作为字段传递?我真的希望不是这样,因为我连接到的服务只是希望文章正文中有原始的JSON。它们并不是为了寻找JSON数据的特定字段而设置的。 我只想和restperts一劳永逸地澄清这一点。一人回答不用改装。另一个不确定句法

  • 我有一个REST api,它接受嵌套json的数据,包括多部分文件 在通过postman测试REST api时,我遇到了问题。 我不知道如何发送我需要的各种类型的数据——多部分/表单数据文件和嵌套的json。 我在其他项目中分别使用了REST,但我无法将它们合并到一个请求中。 要使用多部分/表单数据,我必须在正文中选择表单数据,然后从键字段的下拉列表中选择文件,单击值字段上的选择文件按钮,然后选择

  • 我试图复制下面的POST请求使用Python中的请求模块: 请求文档建议使用files参数。 当我尝试以下呼叫: 我得到以下HTTP请求: 我还尝试使用数据参数: 导致以下HTTP请求: 我遇到的问题是,使用files参数会导致服务器无法识别调用,可能是由于HTTP请求中发送了意外的“filename”信息。使用数据参数发送错误的内容类型标题。 已知第一个请求正在我希望将请求发送到的服务器上工作-

  • 我最近开始在我的android应用程序中使用改装,这是我添加用户的改装请求: 这里User是我想在服务器上注册的用户的模型类。问题是服务器需要Base64.encode()格式的json正文请求。有没有办法使用改装发送Base64编码数据? 我可以想到手动这样做: 然后在请求中传递这个。但是,我必须手动完成这项工作,并处理每个POST请求。有没有更干净的方法。