【Android-upload】Android使用Retrofit上传文件

这篇博客详细介绍了如何在Android中使用Retrofit库进行文件上传,包括上传有限确定个文件和上传任意个文件的方法。文章通过实例代码展示了不同类型的参数使用,包括MultipartBody.Part和RequestBody,并给出了常见错误的解决办法。同时提供了多个参考资料链接,帮助读者深入理解和实践。
摘要由CSDN通过智能技术生成

基本用法

文件1:请求返回的实体类

public class UploadBean {

    private String imageUrl;
    private String textFile;

    public String getImageUrl() { return imageUrl; }
    public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
    public String getTextFile() { return textFile; }
    public void setTextFile(String textFile) { this.textFile = textFile; }
}

文件2:定义请求接口

public interface UploadService {

    // [途径A]文件上传使用MultipartBody.Part对象
    @Multipart
    @POST("/file/image")
    Call<UploadBean> uploadDouble(@Part MultipartBody.Part file1,
                                    @Part MultipartBody.Part file2,
                                    @Part("username") RequestBody username,
                                    @Part("password") RequestBody password);
}

文件3:具体调用的地方

    /**
     * 上传文件
     *
     * @param filePathName1 文件1路径及文件名
     * @param filePathName2 文件2路径及文件名
     */
    public void uploadFile(String filePathName1, String filePathName2) {
        // 生成Retrofit
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://192.168.1.6:8080/upload/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        // 生成Service
        UploadService uploadService = retrofit.create(UploadService.class);

        // 要上传的文件
        File file1 = new File(filePathName1);
        File file2 = new File(filePathName2);

        // 创建 RequestBody,用于封装构建MultipartBody.Part。设置MediaType:application/octet-stream(一说:multipart/form-data,待检验)
        RequestBody requestBody1 = RequestBody.create(MediaType.parse("application/octet-stream"), file1);
        RequestBody requestBody2 = RequestBody.create(MediaType.parse("application/octet-stream"), file2);
        // MultipartBody.Part  和后端约定好Key,这里的partName暂时用"file_key_*"
        MultipartBody.Part partFile1 = MultipartBody.Part.createFormData("file_key_1", file1.getName(), requestBody1);
        MultipartBody.Part partFile2 = MultipartBody.Part.createFormData("file_key_2", file2.getName(), requestBody2);
        // 添加参数用户名和密码,并且是文本类型,设置MediaType为文本类型(一说:multipart/form-data,待检验)
        RequestBody userName = RequestBody.create(MediaType.parse("text/plain"), "username");
        RequestBody password = RequestBody.create(MediaType.parse("text/plain"), "password");

        // 执行请求
        Call<UploadBean> ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值