Полученный Multipart файл от Spring равен нулю - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть файл, и я хочу отправить его в Spring Backend с Android. После получения изображения в Spring я меняю имя изображения, генерируя UUID, а затем загружаю его в AWS S3. Моя проблема в том, что я получаю нулевое значение в качестве ответа.

Сторона Android ->

Функция загрузки файла с Android ->

private void UploadFiles() {
        File uploadFile = fileArrayList.get(0);
        if (uploadFile != null) {
            Log.d(TAG, "UploadFiles: File Name is -> " + uploadFile.getName());

            // cropImageRequest.setCropId(uploadFile.getParentFile().getName());

            // Parsing any Media type file
            RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), uploadFile);

            // MultipartBody.Part is used to send also the actual file name
            MultipartBody.Part cropImage = MultipartBody.Part.createFormData("cropImage", uploadFile.getName(), requestFile);

            Api.uploadCropImage(cropImage, new Callback<BasicResponse>() {
                @Override
                public void onResponse(Call<BasicResponse> call, Response<BasicResponse> response) {
                    if (response.body() != null) {
                        Log.d(TAG, "onResponse: Success" + response.body().getResponse());
                    }
                    else{
                        Log.d(TAG, "onResponse: null Response");
                    }
                }

                @Override
                public void onFailure(Call<BasicResponse> call, Throwable t) {
                    Log.d(TAG, "onResponse: Failure");
                }
            });
        }
    }

** uploadImageFunction -> **

 public static void uploadCropImage(MultipartBody.Part cropImage, Callback<BasicResponse> callback) {
        UploadCropImageApi uploadCropImageApi = retrofit.create(UploadCropImageApi.class);
        Call<BasicResponse> call = uploadCropImageApi.uploadCropImage(cropImage);
        call.enqueue(callback);
    }

Мой интерфейс ->

public interface UploadCropImageApi {
        @Multipart
        @POST(UPLOAD_FILE_TO_AWS_URL)
        Call<BasicResponse> uploadCropImage(@Part MultipartBody.Part cropImage);
    }

Это мой весенний файл ->

@RequestMapping(value = "/UploadCropImage", method = RequestMethod.POST, consumes = {"multipart/form-data"})
    @ResponseBody
    public String UploadImage(@RequestBody MultipartFile cropImage,HttpServletRequest request) {
        mAmazonClient = AmazonClient.GetAmazonClientInstance();
        UUIDUtils uuid = new UUIDUtils();
        try {
            System.out.println(cropImage);
            String KeyName = uuid.GenerateUUID(cropImage.getName());
            String Code = mAmazonClient.uploadImage(KeyName, cropImage);
            System.out.println(Code);
            return Code;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
            return null;
        }
    }

Этот контроллер печатает следующее значение ->

org.springframework.web.multipart.commons.CommonsMultipartFile@b0b5de0
File Name is -: cropImage
null

Моя проблема в том, что, как вы можете видеть, файл, отправленный Retrofit и полученный Spring, не является нулевым, я отправляю этот файл через AWS, но он не загружает файл и возвращает значение null в качестве значения. Но когда я использую POSTMAN, он легко отправляет файл в AWS и возвращает KeyName.

Хорошо, я немного отладил и обнаружил исключение при загрузке файла изображения. и исключение таково -> Неверный синтаксис имени файла, имени каталога или метки тома.

1 Ответ

0 голосов
/ 19 ноября 2018

В вашем исключении указано, что в вашем имени файла что-то не так. Проблема заключается в соглашении об именах, так как при загрузке имени файла, содержащего знак «:», могут быть и другие знаки, которые не принимаются AWS. поэтому просто измените имя файла и разделите имена знаком _ (подчеркивание) вместо "" (пробел), (:) и другими знаками. Это успешно загрузит файл в AWS. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...