Я тестировал .net, веб-API с почтальоном работает, но я стараюсь использовать okhttp3 и retrofit2 в Android.Они оба получили внутреннюю ошибку сервера 500 .Что не так?Что мне делать?
Gradle
реализация 'com.squareup.okhttp3: okhttp: 3.4.1'
реализация 'com.squareup.okhttp3: запись-перехватчик: 3.4.1 '
реализация' com.squareup.retrofit2: модификация: 2.3.0 '
реализация' com.squareup.retrofit2: converter-gson: 2.1.0 '
Модернизация Android (при нажатии кнопки вызова метода uploadFile)
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) {
}
});
}
Я получил ответ внутренняя ошибка сервера (AndroidРежим отладки в студии)
Android okhttp3 (при нажатии кнопки вызывать метод uploadFile)
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 (контроллер веб-API)
[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);
}
Результат почтальона