OkHttp实现多图上传功能

最近做一个电商项目,其中评价模块需要到图片上传,涉及到多图上传。网上一搜,有好多关于多图上传的博客,但用起来效果并不太理想。由于使用okhttp网络框架比较熟悉,干脆就自己动手,丰衣足食。

  • 首先需要用到以下框架:
//瀑布流布局
implementation 'com.nex3z:flow-layout:1.0.0'
//图片选择
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.2'
//okhttp
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
//gson
implementation 'com.google.code.gson:gson:2.8.4'

别忘了要在manifest.xml加入以下权限:



  • 下面是一个简单的demo界面。通过点击上传图片,进入手机相册图库选择图片,然后在上面显示。
    OkHttp实现多图上传功能_第1张图片

多图上传核心代码

  /**
     * 上传多图片
     */
    private void uploadMultiFiles(String url, List files) {
        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        for (int i = 0; i < files.size(); i++) {
            File file = files.get(i);
            RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file);
            builder.addFormDataPart("file", file.getName(), fileBody);
        }

        MultipartBody multipartBody = builder.build();
        Request request = new Request.Builder()
                .url(url)
                .post(multipartBody)
                .build();

        final okhttp3.OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
        OkHttpClient okHttpClient = httpBuilder
                //设置超时
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(okhttp3.Call call, IOException e) {

            }

            @Override
            public void onResponse(okhttp3.Call call, Response response) throws IOException {
                try {
                    String jsonStr = response.body().string();
                    Log.i("EvaluateActivity", "uploadMultiFile() response=" + jsonStr);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        });
    }

下班了,后面有时间再好好补充。

Github传送门

你可能感兴趣的:(Android)