2016-10-27 2 views
4

Сервер, на который я пытаюсь загрузить изображения, ждет массив файлов. Везде в интернете они используют несколько addFormDataPart как мой код ниже:Загрузить массив изображений с помощью OkHTTP

final OkHttpClient client = new OkHttpClient(); 
      MediaType MEDIA_TYPE_PNG; 

      MultipartBody.Builder buildernew = new MultipartBody.Builder().setType(MultipartBody.FORM); 
      for (Image image : media) { 
       MEDIA_TYPE_PNG = image.getName().endsWith("png") ? MediaType.parse("image/png") : MediaType.parse("image/jpeg"); 
       RequestBody imageBody = RequestBody.create(MEDIA_TYPE_PNG, image.getPath()); 
       buildernew.addFormDataPart("file", image.getName(), imageBody); 
      } 
      MultipartBody requestBody = buildernew.build(); 
      final Request request = new Request.Builder() 
        .addHeader("authorization", "Bearer " + Credentials.getAuthToken(mContext)) 
        .url(url) 
        .post(requestBody) 
        .build(); 
      Thread thread = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Response response = client.newCall(request).execute(); 
         if (response.message().contentEquals("OK") && response.code() == 200) { 
          System.out.println(response.body().string()); 
         } 
         System.out.println(response.body().string()); 
        } catch (Exception e) { 
         Log.e(TAG, e.getMessage()); 
        } 
       } 
      }); 
      thread.start(); 

Проблема заключается в том, что сервер получает только последний, так как он проверяет «файл» и занимает последнюю, потому что данные не является массивом , Сервер ожидают данных таким образом:

{ "file" : [Files] } 

ответ

2

Я думаю, что вам нужно изменить имя поля многочастных данных, file[] поскольку сервер ожидает массив изображений, а не один (последний) один:

buildernew.addFormDataPart("file[]", image.getName(), imageBody); 
+0

Это работает. Огромное спасибо :) – charbinary

Смежные вопросы