改造 2 多部分 POST 请求向 PHP 发送额外报价

使用 Retrofit 2.0.1,在 Android App 中定义的 API 接口中有一个调用函数:

@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
  @Part("lang") String lang,
  @Part("file\"; filename=\"image.jpg") RequestBody file
);

我像这样发送请求:

Call call = service.doAPI(“eng”, imageFile);

其中 是使用对象创建的 。上传图像部分没有问题,而该部分在服务器中获得了额外的报价。imageFileRequestBodyFile@Part("lang") String lang

在PHP端,它写如下:

$lang = trim($_POST['lang']);

这将返回 .为什么字符串周围有一个额外的双引号?"eng"

当然,我可以去掉尾随和前导双引号,但这样做很奇怪


相关问题:https://github.com/square/retrofit/issues/1210


答案 1

对于您的问题,请使用作为文档

标量(基元、盒装和字符串):com.squareup.retrofit2:converter-scalars

因此,添加到文件中compile 'com.squareup.retrofit2:converter-scalars:2.0.1'build.gradle

然后。。。

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(API_URL_BASE)
    .addConverterFactory(ScalarsConverterFactory.create())
    //.addConverterFactory(GsonConverterFactory.create())
    .build();

希望它有帮助!


答案 2

对所有参数使用请求正文。请通过下面的代码!!

File file = new File(imagePath);
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("media", file.getName(), requestBody);
RequestBody id = RequestBody.create(MediaType.parse("text/plain"),addOfferRequest.getCar_id());
ApiCallback.MyCall<BaseResponse> myCall = apiRequest.editOfferImage(imageFileBody,id);

使用 RequestBody 类的改造而不是 String

@Multipart
@POST(ApiURL)
ApiCallback.MyCall<BaseResponse> editOfferImage(@Part MultipartBody.Part imageFile,@Part("id") RequestBody id);

推荐