Retrofit上传文件的几种方式

第一种 @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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容