第一种 @Part
@POST("/upload.php")
@Multipart
public Observable<ResultInfo> upload(@Part MultipartBody.Part file);
这种方式函数必须指定@MultiPart注解,函数参数类型为MultipartBody.Part类型,@Part注解不需要指定字段名称。
第二种 @Part("file")
@POST("/upload.php")
@Multipart
public Observable<ResultInfo> upload(@Part("file") RequestBody file);
这种方式同样要求函数必须指定@Multipart注解,函数参数使用@Part("file")注解,通过@Part注解指定字段名称,但是函数参数类型不可以是MultipartBody.Part类型。通过PHP服务器接收的时候需要通过$_POST['file']来接收,而不是$_FILES['file']来接收,这是因为Retrofit在解析@Part注解时指定的头没有filename属性。
第三种 @Body
@POST("/upload.php")
public Observable<ResultInfo> upload(@Body RequestBody file);
这种方式函数不可以使用@Multipart注解和@FormUrlEncoded注解,并且@Body注解只能使用一次,函数的参数类型没有要求,只要可以通过Convert转换成RequestBody就行,不过上传文件一般用直接用RequestBody。如果使用MultipartBody类型作为参数,一定要设置type为MultipartBody.FORM。
网友评论