2016-12-30 4 views
1

Ich habe eine Upload-Aktion auf Server mit asp-Core geschrieben und ich habe getestet, dass mit ARC und Dateien empfangen wird.Nachrüstung 2 Datei-Upload keine Datei anhängen

Correctness Evidence

Aber wenn ich versuche, mit Retrofit hochladen Bild, bekommt nichts zu senden. Auch die Form ist leer:

Fault Occured

der Quellcode-Schnittstelle ist hier. Die Schnittstelle:

public interface QuestionWebService { 

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

und die Verwendung in Asynchron-Aufgabe:

@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; 
    } 

Jede Idee, über das, was sollte ich versuchen? Wo gehe ich falsch. TG.

+0

hame soal deri shuma: D :-P – MHSFisher

+0

retrofit2 mit mehrteiligen nur unterstützung teil typ daten – Saveen

+1

@Saveen was meinst du mit part typ daten? Was ist falsch und was soll ich ändern? – ConductedClever

Antwort

2

Endlich fand ich die Lösung. Ich weiß nicht, der Grund, warum dieser Code nicht funktioniert, sondern als this link sagt, Ich habe die:

public interface QuestionWebService { 

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

auf diese:

public interface QuestionWebService { 

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

und die Nutzung von dieser:

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

auf diese:

// 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(); 

und jetzt geht alles gut !!! Ich hoffe, dass die anderen das gleiche Problem haben werden.

Jetzt sind die Daten auf dem Server ein Formular mit zwei Feldern, UserId und Answer, und eine Datei namens fileUpload. TG.

Verwandte Themen