Retrofit2实现图片上传,以及和以前单纯使用Okhttp的代码对比

以前用的都是okhttp直接上传的,其实也没什么太不好的地方,只是后有其他需求,需要上传多张图片,而后台给的是上传单张图片的接口,之前是写的回调里边套回调,虽然代码逻辑没有什么问题,但是代码混乱,不易于维护,我是后来才加入Rxjava的框架

那么我们就看看怎么来写,具体用法原理什么的我就不重复造轮子了,自己搜索,肯定一搜一堆


直接上代码

没用Retrofit之前,单纯使用Okhttp的代码

 RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);

        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addPart(Headers.of("Content-Disposition", "form-data; name=\"file\"; filename=\""+fileName+".png\""), fileBody)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        Call call = new OkHttpClient().newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
            }
        });



使用Retrofit之后

/** 上传图片 */
    @Multipart
    @POST
    Observable uploadImages(
            @Url String url,
            @Part MultipartBody.Part part);

File file = new File(path);
            RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
            MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);

uploadImages(url,part)


再加上rxjava的操作符一起使用,可以完美解决后台接口是单张上传,但是需求是多张上传的场景


使用时需要注意一些字段的命名,需要和后台共同定义好。

在网上能搜到很多Retrofit上传图片的方法,也不能直接copy,你需要看好一些字段的命名和你们后台的是否符合


【更多开发实用技术请点击】


你可能感兴趣的:(Android,Retrofit)