Retrofit上传文件的几种方式

第一种 @Part

    @POST("/upload.php")
    @Multipart
    public Observable upload(@Part MultipartBody.Part file);

这种方式函数必须指定@MultiPart注解,函数参数类型为MultipartBody.Part类型,@Part注解不需要指定字段名称。

第二种 @Part("file")

    @POST("/upload.php")
    @Multipart
    public Observable 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 upload(@Body RequestBody file);

这种方式函数不可以使用@Multipart注解和@FormUrlEncoded注解,并且@Body注解只能使用一次,函数的参数类型没有要求,只要可以通过Convert转换成RequestBody就行,不过上传文件一般用直接用RequestBody。如果使用MultipartBody类型作为参数,一定要设置type为MultipartBody.FORM。

你可能感兴趣的:(Retrofit上传文件的几种方式)