我曾经使用 Retrofit2 :
向服务器发送POST请求 @POST("goals")
Call<Void> postGoal(@Body Goal goal);
其中,Goal是一些String / Integer字段的对象。
现在我需要在那里添加照片文件。 我知道我需要切换才能使用 Multipart :
@Multipart
@POST("goals")
Call<Void> postGoal(
@Part("picture") RequestBody picture
);
//...
//Instantaining picture
RequestBody.create(MediaType.parse("image/*"), path)
但是我应该如何添加以前的字段呢?特别是有没有办法添加整个Goal对象而不将其划分为字段?
答案 0 :(得分:0)
您可以像这样添加@Part
目标
@Multipart
@POST("goals")
Call<Void> postGoal(
@Part("picture") RequestBody picture,
@Part("goal") RequestBody goal
);
//...
//Instantaining picture
RequestBody.create(MediaType.parse("image/*"), path)
您可以找到更多详细信息:retrofit-2-how-to-upload-files-to-server
答案 1 :(得分:0)
发送json和文件你可以遵循这样的事情。
@Multipart
@POST("goals")
Call<JsonModel> postGoal(@Part MultipartBody.Part file, @Part("json") RequestBody json);
现在使用Gson将您想要作为json发送的对象转换为json。 像这样。
String json = new Gson().toJson(new Goal());
File file = new File(path);
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"), file);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("picture", file.getName(), requestFile);
// add another part within the multipart request
RequestBody jsonBody=
RequestBody.create(
MediaType.parse("multipart/form-data"), json);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
RestApi api = retrofit.create(RestApi.class);
Call<ResponseBody> call = api.upload(jsonBody, body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.d("onResponse: ", "success");
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d("onFailure: ", t.getLocalizedMessage());
}
});