2016-09-19 4 views
1

Ich versuche, ein Bild auf den Server mit Retrofit2, ist aber sehr unsicher, wie dies zu tun, um zu laden.sendet Bild mit Retrofit2

Die Dokumentation hat mich ein wenig verwirrt, und ich habe die Lösung erwähnt here versucht, aber es hat nicht funktioniert für mich. Hier

ist der Code-Snippet ich zur Zeit bin mit, was nichts an den Server sendet:

// Service 
@Multipart 
@POST("0.1/gallery/{galleryId}/addImage/") 
Call<ResponseBody> addImage(@Path("galleryId") String galleryId, @Part MultipartBody.Part image); 

//Call 
MultipartBody.Part imagePart = MultipartBody.Part.createFormData("image", file.getName(), RequestBody.create(MediaType.parse("image/*"), file)); 
Call<ResponseBody> call = service. addImage("1234567890", imagePart); 

aber ich bin in der Lage, es zu tun einfach gut Retrofit mit 1,9 mit einem TypedFile.

Mache ich etwas falsch oder Retrofit2 hat einiges Problem mit dieser Art der Sache?

+1

Try "multipart/form-data" verwenden '' statt ' "image/*"' – Salem

+0

Haben Sie versucht, diese Lösung? http://stackoverflow.com/questions/37681750/retrofit-2-0-multipart/37681984#37681984 – Jaythaking

+0

kann hilfreich sein http://stackoverflow.com/questions/39078192/send-file-to-server-via-retrofit2 -as-object/39108171 # 39108171 – Amir

Antwort

3

Ich habe eine Zeit lang damit zu kämpfen, ich mit dieser Lösung endete bis es schließlich ... Hoffe funktioniert es hilft:

Map<String, RequestBody> map = new HashMap<>(); 
map.put("Id",Utils.toRequestBody("0")); 
map.put("Name",Utils.toRequestBody("example")); 
String types = path.substring((path.length() - 3), (path.length())); 

File file = new File(pathOfYourFile); 
RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpg"), file); 
map.put("file\"; filename=\"cobalt." + types + "\"", fileBody); 

Call<ResponseBody> call = greenServices.upload(map); 

In der greenServices Schnittstelle:

@Multipart 
@POST(Constants.URL_UPLOAD) 
Observable<Response<ResponseBody>> uploadNew(@PartMap Map<String, RequestBody> params); 
0

hallo bitte überprüfen Sie, wie wir Bild in Retrofit2 senden können. In Form von Teil müssen Sie Bild und andere Daten auch senden.

public interface ApiInterface { 
    @Multipart 
    @POST("0.1/gallery/{galleryId}/addImage/") 
    Call<User> checkapi (@Part("file\"; filename=\"pp.png\" ") RequestBody file , @Part("FirstName") RequestBody fname, @Part("Id") RequestBody id); 
} 

File file = new File(imageUri.getPath()); 
RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), file); 
RequestBody name = RequestBody.create(MediaType.parse("text/plain"), firstNameField.getText().toString()); 
RequestBody id = RequestBody.create(MediaType.parse("text/plain"), AZUtils.getUserId(this)); 
Call<User> call = client.editUser(AZUtils.getToken(this), fbody, name, id); 
call.enqueue(new Callback<User>() { 
    @Override 
    public void onResponse(retrofit.Response<User> response, Retrofit retrofit) { 
     AZUtils.printObject(response.body()); 
    } 

    @Override 
    public void onFailure(Throwable t) { 
     t.printStackTrace(); 
    } 
}); 

Danke hoffe, das wird Ihnen helfen.