改造2多部分POST请求向PHP发送额外的引号
使用改型2.0.1,在Android应用程序中定义的my API接口中有一个调用函数:改造2多部分POST请求向PHP发送额外的引号,php,android,multipartform-data,multipart,retrofit2,Php,Android,Multipartform Data,Multipart,Retrofit2,使用改型2.0.1,在Android应用程序中定义的my API接口中有一个调用函数: @Multipart @POST("api.php") Call<ResponseBody> doAPI( @Part("lang") String lang, @Part("file\"; filename=\"image.jpg") RequestBody file ); 返回“eng”。为什么字符串周围有一个额外的双引号 当然我可以去掉尾随和前导双引号,但是这样做很奇怪 相关问题
@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
@Part("lang") String lang,
@Part("file\"; filename=\"image.jpg") RequestBody file
);
返回“eng”
。为什么字符串周围有一个额外的双引号
当然我可以去掉尾随和前导双引号,但是这样做很奇怪
相关问题:对于您的问题,请使用作为文档 标量(基本体、装箱和字符串): 改进2:转换器标量 因此,在
build.gradle
文件中添加compile'com.squareup.reformation2:converter scalars:2.0.1'
然后
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL_BASE)
.addConverterFactory(ScalarsConverterFactory.create())
//.addConverterFactory(GsonConverterFactory.create())
.build();
希望有帮助 对所有参数使用RequestBody
。请通过下面的代码强>
如果您不想使用转换器,我将发送一个包含图像文件和2个字符串的多部分请求:
@Multipart
@POST("$ID_CHECK_URL/document")
fun postMultipart(@Part imageFile: MultipartBody.Part, @Part string2: MultipartBody.Part, @Part string2: MultipartBody.Part)
这样说:
val body = RequestBody.create(MediaType.parse("image/jpg"), file)
val imageFilePart = MultipartBody.Part.createFormData("file", file.name, reqFile)
val string1Part = MultipartBody.Part.createFormData("something", "string 1")
val string2Part = MultipartBody.Part.createFormData("somethingelse", "string 2")
service.postDocument(imageFilePart, string1Part, string2Part)
我今天在项目中遇到了这个问题,我就是这样解决的。我将字符串上的@Part和其他基本值更改为@Query,对于文件(在我的示例图像中),我使用了@Part。看起来@Query处理字符串的方式与@Part不同 所以我对原始问题的回答如下:
@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
@Query("lang") String lang,
@Part("file\"; filename=\"image.jpg") RequestBody file
);
@Multipart
@POST(“api.php”)
呼叫doAPI(
@查询(“lang”)字符串lang,
@部分(“文件\”文件名=\“image.jpg”)请求主体文件
);
这将发送不带多余引号的字符串值。
遗憾的是,我无法解释为什么这样做,它与数据的@Part编码有关。如果您的项目使用IMO的翻新2,您可以在上看到我的答案,请注意
调用postFile(@Part MultipartBody.Part file,@Part(“description”)RequestBody description)代码>是,使用改装2。是否需要使用MultipartBody.Part
?由于RequestBody
也在进行文件上传。有什么区别吗?试着使用另一个转换器作为文档,标量(原语、盒装和字符串):com.squareup.inversion2:converter标量
是的,我也发布了问题中的链接。可能是一个bug。这是这个“bug”的正确解决方案:这个新的转换器工厂是否支持其他以前与gson相关或FormUrlEncoded的请求,或者我们是否需要将所有请求转换为多部分类型。希望你明白我的意思java.lang.IllegalArgumentException:无法为创建转换器class@Yazon2006@BNK那么逻辑在哪里呢?在这个答案中,您建议使用ScalarsConverterFactory。我试了一下,发现有非法的争议。然后你让我使用GsonConverterFactory。非常聪明。@Yazon2006ScalarsConverterFactory
是为OP发行的。我不知道你是否有同样的问题。这个链接是针对IllegalArgumentException
的,我想你可以在那里找到一个有效的答案。我当然没有你聪明!谢谢你救了我。在过去的四个小时里,我一直在面对这个问题,在这一页的最底部,这个答案解决了这个问题。再次感谢
@Multipart
@POST("$ID_CHECK_URL/document")
fun postMultipart(@Part imageFile: MultipartBody.Part, @Part string2: MultipartBody.Part, @Part string2: MultipartBody.Part)
val body = RequestBody.create(MediaType.parse("image/jpg"), file)
val imageFilePart = MultipartBody.Part.createFormData("file", file.name, reqFile)
val string1Part = MultipartBody.Part.createFormData("something", "string 1")
val string2Part = MultipartBody.Part.createFormData("somethingelse", "string 2")
service.postDocument(imageFilePart, string1Part, string2Part)
@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
@Query("lang") String lang,
@Part("file\"; filename=\"image.jpg") RequestBody file
);