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;
}
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。