根据下图使用 Retrofit 上传图片
Upload Image using Retrofit based on the image below
I am trying to do this Post request on retrofit
首先为您的 POST API
创建接口
public interface APIInterface {
@Multipart
@POST("you_api_node")
Call<MediaTransfer> PostMedia(@Part("key") RequestBody key,
@Part("AwsAccesskeyID") RequestBody AwsAccesskeyID,
@Part("x-amz-security-token") RequestBody x-amz-security-token,
@Part("policy") RequestBody policy,
@Part("signature") RequestBody signature,
@Part MultipartBody.Part file);
}
你的 API 客户端 Class 你在其中初始化了你的 Retrofit
public class APIClient {
public static Retrofit retrofit;
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl("http://mybaseurl.com")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
}
return retrofit;
}
}
现在在您的 Activity/Class
中创建 PostMedia 功能
public void PostMedia(RequestBody key,RequestBody AwsAccessKeyID,RequestBody x-amz-security-token, RequestBody policy, RequestBody signature,MultipartBody.Part file ){
APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
Call<MediaTransfer> call = apiInterface.PostMedia(key, AwsAccessKeyID, x-amz-security-token, policy, signature,file);
call.enqueue(new Callback<MediaTransfer>() {
@Override
public void onResponse(Call<MediaTransfer> call, Response<MediaTransfer> response) {
if (response.isSuccessful()) {
//Do Something
}
}
@Override
public void onFailure(Call<MediaTransfer> call, Throwable t) {
mediaTimeout = t.getMessage();
Log.d("MyResponse", "Post Media failure" + t.getMessage());
}
});
}
现在您可以在 MainActivity 中调用。
File myfile = new File(filePath);
RequestBody surveyBody = RequestBody.create(MediaType.parse("image/*"), file);
surveyImagesParts[index] = MultipartBody.Part.createFormData("file", file.getName(), surveyBody);
RequestBody key= RequestBody.create(MediaType.parse("multipart/form-data"), key);
RequestBody AwsAccesskeyID= RequestBody.create(MediaType.parse("multipart/form-data"), AwsAccesskeyID);
RequestBody x-amz-security-token = RequestBody.create(MediaType.parse("multipart/form-data"), x-amz-security-token);
RequestBody policy= RequestBody.create(MediaType.parse("multipart/form-data"), policy);
RequestBody signature= RequestBody.create(MediaType.parse("multipart/form-data"), signature);
现在你可以调用上面的 PostMedia(...) 函数了。
I am trying to do this Post request on retrofit
首先为您的 POST API
创建接口public interface APIInterface {
@Multipart
@POST("you_api_node")
Call<MediaTransfer> PostMedia(@Part("key") RequestBody key,
@Part("AwsAccesskeyID") RequestBody AwsAccesskeyID,
@Part("x-amz-security-token") RequestBody x-amz-security-token,
@Part("policy") RequestBody policy,
@Part("signature") RequestBody signature,
@Part MultipartBody.Part file);
}
你的 API 客户端 Class 你在其中初始化了你的 Retrofit
public class APIClient {
public static Retrofit retrofit;
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl("http://mybaseurl.com")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
}
return retrofit;
}
}
现在在您的 Activity/Class
中创建 PostMedia 功能public void PostMedia(RequestBody key,RequestBody AwsAccessKeyID,RequestBody x-amz-security-token, RequestBody policy, RequestBody signature,MultipartBody.Part file ){
APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
Call<MediaTransfer> call = apiInterface.PostMedia(key, AwsAccessKeyID, x-amz-security-token, policy, signature,file);
call.enqueue(new Callback<MediaTransfer>() {
@Override
public void onResponse(Call<MediaTransfer> call, Response<MediaTransfer> response) {
if (response.isSuccessful()) {
//Do Something
}
}
@Override
public void onFailure(Call<MediaTransfer> call, Throwable t) {
mediaTimeout = t.getMessage();
Log.d("MyResponse", "Post Media failure" + t.getMessage());
}
});
}
现在您可以在 MainActivity 中调用。
File myfile = new File(filePath);
RequestBody surveyBody = RequestBody.create(MediaType.parse("image/*"), file);
surveyImagesParts[index] = MultipartBody.Part.createFormData("file", file.getName(), surveyBody);
RequestBody key= RequestBody.create(MediaType.parse("multipart/form-data"), key);
RequestBody AwsAccesskeyID= RequestBody.create(MediaType.parse("multipart/form-data"), AwsAccesskeyID);
RequestBody x-amz-security-token = RequestBody.create(MediaType.parse("multipart/form-data"), x-amz-security-token);
RequestBody policy= RequestBody.create(MediaType.parse("multipart/form-data"), policy);
RequestBody signature= RequestBody.create(MediaType.parse("multipart/form-data"), signature);
现在你可以调用上面的 PostMedia(...) 函数了。