2015-12-12 2 views
1

Я отправляю несколько данных на сервер, используя модифицированную модификацию: 2.0.0-beta2. Данные содержат массив файлов ArrayList<File>. Я использую этот код для отправки обособленно файла:retrofit: 2.0.0-beta2 post массив файлов

public Call<User> requestUpdateProfile3(String token, File image) {  
RequestBody requestBodyImage = RequestBody.create(MediaType.parse("multipart/form-data"), image); 
      return apiService.updateProfile3(token, requestBodyProfile, requestBodyImage); 

и это на ApiService

@Multipart 
    @POST("/shanyraq/profile/update") 
    Call<User> updateProfile3(
      @Header(value = "X-AUTH-TOKEN") String toke, 
      @Part("1\"; filename=\"1.jpg") RequestBody image); 

Вопрос: Как я могу сообщение массив файлов с помощью переоснащения: 2.0.0-beta2 ??

ответ

3

Я загрузил несколько изображений, как показано ниже. Какая загрузка изображений с их именами.

Сервисный интерфейс:

@Multipart 
    @POST(ConstantsWebService.UPLOAD_SERVICES_IMAGE) 
    Call<List<String>> uploadImage(
      @Header("Authorization") String token, 
      //@Part("file\"; filename=\"902367000083-1.jpg") RequestBody mapFileAndName); //for sending only one image 
      @PartMap() Map<String,RequestBody> mapFileAndName); //for sending multiple images 

И просьба:

HashMap<String,RequestBody> map=new HashMap<>(listOfNames.size()); 
    RequestBody file=null; 
    File f=null; 

    for(int i=0,size=listOfNames.size(); i<size;i++){ 
     try { 
      f = new File(context.getCacheDir(), listOfNames.get(i)+".jpg"); 
      FileOutputStream fos = new FileOutputStream(f); 
      Bitmap bitmap = getImageFromDatabase(listOfNames.get(i)); 
      if(bitmap!=null){ 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 0 /*ignored for PNG*/, fos); 
       fos.flush(); 
       fos.close(); 
      }else{ 
       view.showErrorView("imageNotFound"); //todo 
       return; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      view.showErrorView("imageNotFound || file not created"); //todo 
      return; 
     } 

     file=RequestBody.create(MediaType.parse("multipart/form-data"), f); 
     map.put("file\"; filename=\""+listOfNames.get(i)+".jpg",file); 
     file=null; 
     f = null; 
    } 

    serviceOperation.uploadImage(token,map).enqueue(){..} 

Таким образом, вы измените тип возвращаемого значения, имя заголовка, имя изображения.

+0

я могу отправить массив файла в один RequestBody? – kadik

+0

Класс RequestBody имеет методы с именем 'create', которые принимают объект File или MediaType в качестве аргумента. Поэтому я думаю, что вы не можете хранить массив внутри RequestBody, но вы можете отправить массив RequestBody на webservice –

+0

Как вы определяете имя/значение. Если я хочу отправить его на сервер под «images []», как я могу это сделать? – Sree

0

Я был бы счастлив и рад, если бы это могло вам помочь.

контракт API

Сервер: Input Тип: Multipart-из данных

Данные, которые будут посылать в теле против ключа под названием «изображения»

@POST("feeds") 
Call<> createFeeds(@Body RequestBody file); 


MultipartBody.Builder builder = new MultipartBody.Builder(); 
    builder.setType(MultipartBody.FORM); 
    builder.addFormDataPart("content", textContent); 

    for(String filePath : imagePathList){ 
     File file = new File(filePath); 
     builder.addFormDataPart("images", file.getName(), 
       RequestBody.create(MediaType.parse("image/*"), file)); 
    } 

    MultipartBody requestBody = builder.build(); 
    Call<SocialCreateFeedResponse> call = mSocialClient.createFeeds(requestBody); 
0
Interface structure: 
    @Multipart 
    @POST("user_edit_profile_save") 
    Call<EditProfileDto> saveEditProfile(@Part("first_name") RequestBody first_name, 
             @Part MultipartBody.Part profile_picture); 


    Calling: 
RequestBody requestBodyUserId = RequestBody.create(
        MediaType.parse("multipart/form-data"), "5"); 
MultipartBody.Part body = null; 
      if (path != null && path.length() > 0) { 
       file = new File(path); 
       isImageSet = true; 
       requestBodyPicture = RequestBody.create(
         MediaType.parse("multipart/form-data"), file); 
       body = MultipartBody.Part.createFormData("profile_picture", file.getName(), requestBodyPicture); 

      } else { 
       requestBodyPicture = RequestBody.create(
         MediaType.parse("multipart/form-data"), ""); 
      } 
+0

, пожалуйста, дайте некоторое описание перед написанием кода-обзора –

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