2016-04-13 12 views
2

Ich bin kürzlich von der Verwendung von Retrofit 1.9 zu Retrofit 2 übergegangen und habe ein Problem beim Veröffentlichen binärer Daten.Korrekte Möglichkeit, binäre Daten mit Retrofit 2.0 zu schreiben

Als ich Retrofit 1.9 verwendet habe, konnte ich eine TypedByteArray senden, die byte[] Daten als @Body einer Anfrage enthielt. Das nächstgelegene entspricht TypedByteArray scheint RequestBody zu sein, die ich verwende, wie folgt:

final ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); 
thumbnail.compress(Bitmap.CompressFormat.JPEG, 5, byteOutputStream); 
final byte[] thumbnailBytes = byteOutputStream.toByteArray(); 
final RequestBody thumbnailRequestBody = RequestBody.create(MediaType.parse("image/jpeg"), thumbnailBytes); 

Der Code, die Anforderung zu erzeugen, ist unter:

Headers("Content-Type: image/jpeg") 
@POST("/thumbnail") 
Call<Void> uploadThumbnail(@Body RequestBody thumbnailContent); 

Allerdings scheint es, dass Retrofit zu versuchen werden können Analysieren Sie das RequestBody als JSON-Objekt, da die Daten, die tatsächlich an den Server gesendet werden, {} sind.

Irgendwelche Ratschläge oder Anleitungen, wie man binäre Daten korrekt postet, würde geschätzt werden. Vielen Dank.

+0

statt mit '@ RequestBody', verwenden Sie' @ Teilwerk' –

+0

Sie können 'Anruf verwenden postFile (@Part MultipartBody.Part Datei, @Part ("Beschreibung") RequestBody Beschreibung); '. Bitte lesen Sie http://StackOverflow.com/questions/36491096/retrofit-multipart-request-required-multipartfile-parameter-file-is-not-pre/36514662#36514662 – BNK

Antwort

1

Erstellen Sie Ihre Anfrage wie diese

Headers("Content-Type: image/jpeg") 
@POST("/thumbnail") 
@Multipart 
Call<Void> uploadThumbnail(@Part RequestBody thumbnailContent); 

Nennen Sie es, wie diese

File partFile = <your_stream_as_file>; 
RequestBody fbody = RequestBody.create(MediaType.parse("image"), partFile); 
uploadThumbnail(fbody); 
+0

Danke, aber das 'RequestBody' scheint immer noch zu senden' {} 'zum Server. – Michael

+0

Der Fehler wurde nun von @sapht behoben, aber in Zukunft: Wenn Ihre Antwort eine Korrektur benötigt, klicken Sie auf den Link "Bearbeiten" der Frage und beheben Sie sie. Die Kommentare sind ein Ort, an dem man sagen kann: "Ups, ich muss X zu Y ändern, das ist jetzt gemacht", nicht "Würde jemand bitte X zu Y ändern?" –

Verwandte Themen