Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改造2多部分POST请求向PHP发送额外的引号_Php_Android_Multipartform Data_Multipart_Retrofit2 - Fatal编程技术网

改造2多部分POST请求向PHP发送额外的引号

改造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”。为什么字符串周围有一个额外的双引号 当然我可以去掉尾随和前导双引号,但是这样做很奇怪 相关问题

使用改型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”
。为什么字符串周围有一个额外的双引号

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



相关问题:

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

标量(基本体、装箱和字符串): 改进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。非常聪明。@Yazon2006
ScalarsConverterFactory
是为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
);