2016-09-19 16 views
1

Retrofit2を使用して画像をサーバーにアップロードしようとしていますが、その方法はわかりません。画像をRetrofit2で送信する

ドキュメントはちょっと混乱してしまいましたが、私はhereという解決策を試しましたが、それは私のためには機能しませんでした。

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

しかし、私はTypedFileでレトロフィット1.9を使用してうまくそれを行うことができるよ:ここ

は、私は現在、サーバーには何も送信しない、使用しているコードスニペットです。

私は間違ったことをしていますか、Retrofit2にはこの種の問題がありますか?私は...私は最終的にそれを動作させるために、このソリューションで終わった、にこれでしばらくの間、苦労してきました

+1

'' image/* ''の代わりに '' multipart/form-data ''を使用してみてください – Salem

+0

解決策を試しましたか? http://stackoverflow.com/questions/37681750/retrofit-2-0-multipart/37681984#37681984 – Jaythaking

+0

役立つ可能性があります。http://stackoverflow.com/questions/39078192/send-file-to-server-via-retrofit2 -as-object/39108171#39108171 – Amir

答えて

3

は、それが役立ちますホープス:

greenServicesインタフェースで
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); 

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

こんにちは、retrofit2で画像を送信する方法をご確認ください。一部の形式では、画像やその他のデータも送信する必要があります。

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

ご協力ありがとうございました。

関連する問題