图像Multipart在类类型对象中.
案例1.(我做过的)
服务参数:
{"id":"1","name":"vishal","image/file":""}
那时我的改造API
@Multipart @POST("webservice") Call<SignUpResp> loadSignupMultipart(@Part("description") RequestBody description,@Part MultipartBody.Part file,@QueryMap HashMap<String,String> params);
情况2.(我遇到问题)@Body class< UploadwithImage>
{ "methodName":"submitLevel1Part2Icon","userid":"150","headerData":{ "fiction":{ "icon_type":"1","icon_id":"3"},"nonfiction":{ "icon_type":"2","icon_id":"4"},"relation":{ "icon_type":"3","icon_id":"0","name":"Ronak","relative_image":"<File>","relation_id":"3"},"self":{ "icon_type":"4","icon_id":"0"} } }
我正在尝试这个API
@Multipart @POST("webservice") Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("description") RequestBody description,@Body UploadwithImage uploadImage);
Java方面
/** * code for multipart */ // create RequestBody instance from file RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"),fileUpload); // MultipartBody.Part is used to send also the actual filename MultipartBody.Part body = MultipartBody.Part.createFormData("methodName[headerData][relation][relative_image]",fileUpload.getName(),requestFile); // add another part within the multipart request String descriptionString = "hello,this is description speaking"; RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"),descriptionString); call = service.loadLevel1halfIconswithImage(description,body,levelOneHalfIcons);
我不知道为什么,但它返回错误,如:
“@Body parameters cannot be used with form or multi-part encoding”
任何帮助,将不胜感激.
解决方法
简单来说,我这样做了:
我改变了tested
Call<Result> resultCall = service.uploadImage(body);
至
调用<结果> resultCall = service.uploadImage(body,result);结果是什么
我的API的Result.java类(Response):
public class Result { @SerializedName("result") @Expose private String result; public String getValue() { return value; } public void setValue(String value) { this.value = value; } @SerializedName("value") @Expose private String value; /** * @return The result */ public String getResult() { return result; } /** * @param result The result */ public void setResult(String result) { this.result = result; } }
并创建对象,如:
Result result = new Result(); result.setResult("success"); result.setValue("my value");
您可以根据需要更改类,然后在发送请求时传递对象.所以你的ApiService课程就像:
ApiService.java
/** * @author Pratik Butani on 23/4/16. */ public interface ApiService { /* Retrofit get annotation with our URL And our method that will return us the List of Contacts */ @Multipart @POST("upload.PHP") Call<Result> uploadImage(@Part MultipartBody.Part file,@Part("result") Result result); }
<?PHP $file_path = ""; $var = $_POST['result']; //here I m getting JSON $file_path = $file_path . basename( $_FILES['uploaded_file']['name']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$file_path)) { $result = array("result" => "success","value" => $var); } else{ $result = array("result" => "error"); } echo json_encode($result); ?>
希望它能帮到你.谢谢.