DOwnload base64 image on a protected site using Picasso

后端 未结 2 1811
悲&欢浪女
悲&欢浪女 2021-01-23 04:41

I tried to use this Android Picasso library, How to add authentication headers? to access a protected image that returns the base64 version of the image. My problem is that the

相关标签:
2条回答
  • 2021-01-23 05:18

    You need to intercept the answer and change it

    OkHttpClient client;
    OkHttpClient.Builder builderOkHttpClient;
    builderOkHttpClient = new OkHttpClient.Builder();
            builderOkHttpClient.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request newRequest = chain.request().newBuilder()
                            .build();
                    Response response = chain.proceed(newRequest);
                    try {
                        MediaType contentType = response.body().contentType();
                        String  base64String = response.body().string().getBytes("UTF-8");
                        base64String  = base64String .replace("data:image/jpeg;base64,", "");
                        byte[] decodedString = Base64.decode(base64String , Base64.DEFAULT);
                        ResponseBody body = ResponseBody.create(contentType, decodedString);
                        response = response.newBuilder().body(body).build();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    return response;
                }
            });
    
     int cacheSize = 10 * 1024 * 1024;
            Cache cache = new Cache(context.getCacheDir(), cacheSize);
            builderOkHttpClient.cache(cache);
            client = builderOkHttpClient.build();
            Application.getAppComponent().inject(this);
            picasso = new Picasso.Builder(context)
                    .downloader(new OkHttp3Downloader(client))
                    .loggingEnabled(true)
                    .indicatorsEnabled(true)
                    .listener(new Picasso.Listener() {
                                  @Override
                                  public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                                      Log.e("PICASSO", "loading image " + uri);
                                      Log.e("PICASSO ERROR", exception.getMessage());
                                  }
                              }
                    ).build();
    
    0 讨论(0)
  • 2021-01-23 05:33

    Above answer works great. Then if the base 64 encoded image is further stored inside a JSON Object.

     String jsonData = response.body().string();
     JSONObject Jobject = new JSONObject(jsonData);
     String base64String = (String) Jobject.get("ImageData");
    
    0 讨论(0)
提交回复
热议问题