2016-12-30 5 views
1

Я написал действие загрузки на сервере с использованием ядра asp, и я протестировал это с ARC и файлы получили.Retrofit 2 загрузка файла не прилагается файл

Correctness Evidence

Но когда я пытаюсь загрузить изображение с Модернизированным, ничто не отправить. Даже форма пуста:

Fault Occured

Исходный код интерфейса находится здесь. Интерфейс:

public interface QuestionWebService { 

    @Multipart 
    @POST("questionapi/uploadfiles") 
    Call<ResponseBody> uploadSync(@Part("fileUpload") RequestBody paramTypedFile); 
} 

и использование в асинхронном задачи:

@Override 
    protected Boolean doInBackground(String... params) { 


      File fileToSend = new File(params[0]); 

//   fileToSend.renameTo() 

      RequestBody typedFile = RequestBody.create(MediaType.parse("image/*"), fileToSend); 
      Response response = restClient.getQuestionService().uploadSync(typedFile).execute(); 

      if (response == null){ 
       Log.e(TAG, "success send server - failed"); 
       return false; 
      } 
      if (response.isSuccessful()) { 
       Log.e(TAG, "success send server - 200 status"); 
      } else { 
       Log.e(TAG, "success send server - fail status - " + response.toString()); 
      } 

     } catch (Exception e) { 
      //throw new RuntimeException(e); 
      Log.e(TAG,e.getMessage().toString()); 
      return false; 
     } 

     return true; 
    } 

Любая идея о том, что я должен попробовать? Где я иду неправильно. TG.

+0

che hame soal deri shuma: D :-P – MHSFisher

+0

retrofit2 с многопользовательской поддержкой только данные типа детали – Saveen

+1

@Saveen Что вы подразумеваете под данными типа детали? Что не так, и что я должен изменить? – ConductedClever

ответ

2

Наконец-то я нашел решение. Я не знаю причину, о том, почему этот код не работает, но, как this link говорит, я изменил:

public interface QuestionWebService { 

    @Multipart 
    @POST("questionapi/uploadfiles") 
    Call<ResponseBody> uploadSync(@Part("fileUpload") RequestBody paramTypedFile); 
} 

к этому:

public interface QuestionWebService { 

    @Multipart 
    @POST("questionapi/uploadfiles") 
    Call<ResponseBody> uploadSync(@Part("UserId") RequestBody UserId, @Part("answer") RequestBody answer, @Part MultipartBody.Part file); 
} 

и использование от этого:

RequestBody typedFile = RequestBody.create(MediaType.parse("image/*"), fileToSend); 
      Response response = restClient.getQuestionService().uploadSync(typedFile).execute(); 

к этому один:

// create RequestBody instance from file 
      RequestBody requestFile = 
        RequestBody.create(MediaType.parse("multipart/form-data"), fileToSend); 

      // MultipartBody.Part is used to send also the actual file name 
      MultipartBody.Part body = 
        MultipartBody.Part.createFormData("fileUpload", fileToSend.getName(), requestFile); 
RequestBody userId = 
        RequestBody.create(
          MediaType.parse("multipart/form-data"), userIdString); 

      // add another part within the multipart request 
      String answerString = "hello, this is answer speaking"; 
      RequestBody answer = 
        RequestBody.create(
          MediaType.parse("multipart/form-data"), answerString); 

      Response response = restClient.getQuestionService().uploadSync(userId, answer, body).execute(); 

и теперь все идет правильно !!! Надеюсь, это у других возникнет такая же проблема.

Теперь данные на сервере представляют собой форму с двумя полями, UserId и Answer и файл с именем fileUpload. TG.

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