Как исправить ошибку сервера 500 при отправке файла Multipart в Retorfit Android - PullRequest
0 голосов
/ 19 сентября 2019

Я загружаю файлы, используя модификацию, но есть ошибка сервера, когда POST файл с данными

Запрос Post Man работает при загрузке файлов, но когда он приходит к andoid, он возвращает ошибку сервера 500Здесь я загружаю файлы This is the PostMan body

    HashMap<String, Object> map = new HashMap<>();
    map.put("s_name", name);
    map.put("s_file_number", fileNumber);
    map.put("fk_i_extension_id", 3);
    map.put("fk_i_project_id", 1);
    map.put("s_description", description);
    map.put("fk_i_type_id", 6);
    map.put("b_secret", 1);
    map.put("fk_i_category_id", 60);
    map.put("s_file", s_file.headers());
    map.put("s_attachments", listOfFilePart);




    Call<ArchiverMainObject> fileCall = ArchiveApplication.apiRequests.addFile(token, map);
    fileCall.enqueue(new Callback<ArchiverMainObject>() {
        @Override
        public void onResponse(Call<ArchiverMainObject> call, Response<ArchiverMainObject> response) {

      f (response.errorBody() != null) {
                JSONObject jsonObject = null;
                try {
                    jsonObject = 
         new JSONObject(response.errorBody().string());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onFailure(Call<ArchiverMainObject> call, Throwable t) {
            Log.d(TAG, "onResponse:  addFile  error " + t.getMessage());

        }
    });

}

Конвертер файлов

 @NonNull
 private MultipartBody.Part prepareFilePart(String partName, String url) {

    java.io.File file = new java.io.File(url);

    RequestBody requestFile = 
    RequestBody.create(MediaType.parse("multipart/form-data"), file);

    return MultipartBody.Part.createFormData(partName, file.getName(), 
     requestFile);
}

ClientAPi

 @Multipart
@POST("files/new")
Call<ArchiverMainObject> addFile(
        @Header("Authorization") String token,
        @PartMap Map<String, Object> newFile);

эточасть кода ошибки:

  {"status":{"success":false,"message":"Undefined variable: 
  fileName","status_code":500},"debug":

1 Ответ

0 голосов
/ 20 сентября 2019

Решаю, отредактировав метод интерфейса api, запустив mutlipart с карты

Из этого:

    @Multipart
    @POST("files/new")
    Call<ArchiverMainObject> addFile(
           @Header("Authorization") String token,
           @PartMap Map<String, Object> newFile);

К этому:

      @Multipart
      @POST("files/new")
     Call<ArchiverMainObject> addFile(
           @Header("Authorization") String token,
           @PartMap Map<String, Object> newFile,
           @Part MultipartBody.Part  file);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...