Angular 5 + загрузка загрузочного образа Spring

Я пытаюсь загрузить образ из угловой в весеннюю загрузочную подставку. но это бросает

org.springframework.web.multipart.MultipartException: Current request is not a multipart request
    at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:190) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]

Я новичок в обеих технологиях. Помогите загрузить файл.

Вот код.

RestController

public ResponseMessage addUser(@RequestParam("profileImage") MultipartFile profileImage,
    @RequestParam("user") User user) {

try {
    if (userService.doesUserExist(user.getUsername())) {
    return new ResponseMessage("The username is not available; please choose a different username", 200);
    }
} catch (Exception e) {
    System.out.println(e.getMessage());
}
String extension = FilenameUtils.getExtension(profileImage.getOriginalFilename());
storageService.storeFile(profileImage, user.getUsername() + "." + extension, profilePicturePath);
user.setProfilePicturePath(profilePicturePath + "/" + user.getUsername() + "." + extension);
userService.addUser(user);

return new ResponseMessage(user.getUsername() + " was added successfully!", 200);
}

Угловая служба

addUser(user:User,profileImage:File){
      const formData:FormData = new FormData();

     formData.append('profileImage', profileImage);
     formData.append('user',JSON.parse(JSON.stringify(user)));

     return this.http.post<ResponseMessage>("/api/admin/user/new_user",formData,this.postHttpOptions);

    }

Угловой компонент

setImage(files:FileList){
    this.newProfileImage = files.item(0);
  }
upload(){
if (this.newUser.password == this.newUser.confirmPassword) {
      this.userService.addUser(this.newUser,this.newProfileImage).subscribe(
        res => {
          this.responseMessage = res;
          alert(this.responseMessage.message);
        },
        err => {
          alert("Error Adding the user: " + err.message);
        }
      );
    }
}

Угловой шаблон

<input type='file' id = "imgInp" (change) = "setImage($event.target.files)" />

пожалуйста, поделитесь полной трассировкой стека и curl, который запрашивается из angular

sidgate 30.03.2018 20:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
3 588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял.

Внесенные мной изменения ..

  1. Вместо @RequestParam я добавил @Requestpart
  2. Вместо пользователя @RequestParam User я добавил пользователя @RequestPart String; затем преобразовал String в пользователя с помощью ObjectMapper.
  3. На стороне клиента я удалил ContentType = application / Json и не упомянул о типе содержимого.

Вот код

public String addUser(@RequestPart("profileImage") MultipartFile profileImage,
        @RequestPart("user") String userString) throws JsonParseException, JsonMappingException, IOException {

    User user = new ObjectMapper().readValue(userString, User.class);
}

Другие вопросы по теме