账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用Retrofit上传文件并且携带参数,为什么这样不行呢?
    22
    0

    1.Retrofit接口定义:

        @Multipart
        @POST(RequestUrl.BANK_CARD_INFO)
        Observable<BaseResponse<Object>> bankCardInfo(@Part MultipartBody.Part file);

    2.使用:

    
                            String traceId = UUID.randomUUID().toString(); //随机生成唯一traceId
                            String path = selectList.get(0).getPath();
    //                        Log.d(TAG, "onActivityResult: 1616=  " + path);
                            File file = new File(path);
                            RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file);
    //                        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
                            RequestBody traceBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    //                        RequestBody fileRQ = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    //                        MultipartBody.Part part = MultipartBody.Part.createFormData("picture", file.getName(), fileRQ);
                            Toast.makeText(this, "1933=   "+traceId, Toast.LENGTH_SHORT).show();
                            RequestBody bo=new MultipartBody.Builder()
                                    .addFormDataPart("trace_id",traceId,traceBody)
                                    .addFormDataPart("image",file.getName(),fileBody)
                                    .build();
    
                            MultipartBody.Part myBody =
    //                                MultipartBody.Part.createFormData();
                                    MultipartBody.Part.createFormData("image", file.getName(), bo);   //name为传递文件的键
    
                            //todo:传递银行卡照片到智趣,返回银行卡信息
                            RxManager.getMethod().bankCardInfo(myBody)
                                    .compose(RxUtil.schedulers(this))
                                    .subscribe(new RxCallback<Object>(this) {
                                        @Override
                                        public void onSuccess(Object o, String msg) {
                                            Log.d(TAG, "onSuccess: 获取银行卡信息成功");
                                        }
                                    });
                            break;
                    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 仗剑生 普通会员 1楼

      Retrofit 使用HTTP请求发送 HTTP 请求到服务器,并且服务器接收HTTP请求返回HTTP响应。然后,Retrofit使用解析器将HTTP响应解析为JSON格式。最后,Retrofit使用服务端框架如OkHttp或者Gson来将JSON格式的数据发送到客户端。

      如果你尝试使用Retrofit上传文件,但参数没有携带,那么Retrofit无法正确解析文件路径和文件名,从而无法将文件发送到服务器。你可以通过在请求头中添加参数来解决这个问题。例如:

      java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://your-server.com/upload") .addHeader("Content-Type", "multipart/form-data") .addHeader("Authorization", "Bearer your-token") .post(RequestBody.create(new File("path_to_your_file"), "file_type"), new HashMap<String, String>() { { put("file_name", "your-file-name"); } }) .build();

      在这个例子中,请求头中的"Content-Type"和"Authorization"参数告诉服务器这是一个POST请求,并且文件的类型是multipart/form-data。

    更多回答
    扫一扫访问手机版