I tested .net web API with postman is working but I try to use okhttp3 and retrofit2 in android. Both of them I got internal server error 500. What wrong it is? What should I do?
Gradle
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
Android Retrofit (When click button call uploadFile method)
public interface UploadAPIs {
@Multipart
@POST("FileUpload")
Call<ResponseBody> uploadFile(
@Part ("description") RequestBody description,
@Part MultipartBody.Part file);
}
public Boolean uploadFile(File file) {
RequestBody descriptionPart = RequestBody.create(MultipartBody.FORM, file.getName());
RequestBody filePart = RequestBody.create(MediaType.parse("image/gif"), file);
MultipartBody.Part fileMulti = MultipartBody.Part.createFormData("file"
, file.getName(), filePart);
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://xxxxxxxxxx/api/FileExplorerApi/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
UploadAPIs uploadAPIs = retrofit.create(UploadAPIs.class);
Call<ResponseBody> call = uploadAPIs.uploadFile(descriptionPart, fileMulti);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (!response.isSuccessful()) {
// Handle the error
String error = response.errorBody().toString();
return false;
}else{
String responseStr = response.body().toString();
return true;
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
I got response internal server error (Android studio Debugging mode)
Android okhttp3(When click button call uploadFile method)
public Boolean uploadFile(File file) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file))
.build();
Request request = new Request.Builder()
.url("http://xxxxxxxxxx/api/FileExplorerApi/FileUpload")
.post(body)
.addHeader("content-type", "multipart/form-data")
.addHeader("Content-Type", "multipart/form-data,image/gif")
.addHeader("cache-control", "no-cache")
.addHeader("Postman-Token", "58564c84-b8a7-4455-b346-4606ce696675")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(final Call call, final IOException e) {
// Handle the error
}
@Override
public void onResponse(final Call call, final Response response) throws IOException {
if (!response.isSuccessful()) {
// Handle the error
return false;
}else{
String responseStr = response.body().string();
return true;
}
// Upload successful
}
});
}
.net Web Api(Web api controller)
[HttpPost]
[Route("~/FileExplorerApi/FileUpload")]
public HttpResponseMessage Upload()
{
var request = HttpContext.Current.Request;
var file = request.Files["file"];
string filename = DateTime.Now.ToString("yyyyMMddHHmmssFFF_") + file.FileName;
file.SaveAs(@"c:\Projects\FileExplorer\Gif\" + filename);
return new HttpResponseMessage(HttpStatusCode.OK);
}