改进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);

imageFile是一个使用File对象创build的RequestBody 。 上传图片部分没有问题,而@Part("lang") String lang部分在服务器中有额外的引号。

PHP方面,它是这样写的:

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

返回"eng" 。 为什么有一个额外的双引号包围了string?

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


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

Solutions Collecting From Web of "改进2多部分POST请求向PHP发送额外的引号"

对于你的问题,请使用作为文件

标量(基元,盒装和string):com.squareup.retrofit2:转换器标量

所以,将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(); 

希望能帮助到你!

对所有参数使用RequestBody 请通过下面的代码!

 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类的Retrofit而不是String

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