Угловая загрузка файла SpringBoot Multipart - PullRequest
0 голосов
/ 10 декабря 2018

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

 @RequestMapping(value= "/upload", method=RequestMethod.POST)
public AppResponse<User> saveUser(@RequestParam("userId") Long userId, @RequestParam("files") List<MultipartFile> files, HttpServletRequest request){
    int i=0;
    User user=userLogic.getUserById(userId);
    String[] imageUrls= new String[files.size()];
    try {
        for(MultipartFile file:files) {
            if(file.getContentType().equals("image/jpeg") || file.getContentType().equalsIgnoreCase("image/pjpeg")) {
                ObjectMetadata meta= new ObjectMetadata();
                meta.setContentType(file.getContentType());
                meta.setContentDisposition(userId+"_"+i);
                PutObjectResult result=s3Client.putObject(PHOTO_DIRECTORY,getFileName(userId, i),file.getInputStream(),meta);
                imageUrls[i]=PHOTO_DIRECTORY+"/"+getFileName(userId, i);
            } else {
                throw new InvalidFileFormatException("This filetype is not accepted");
            }

        }
        user.setActorPhotos(imageUrls);
        userLogic.saveUser(user);
        return new AppResponse<>(false, "Success");
    }
    catch(InvalidFileFormatException | IOException e) {
        System.err.println("Exception in file upload");
        return new AppResponse<>(true, "Failure");
    }

А мой угловой сервисный код выглядит следующим образом

 postPhotos(files: any,userId:any): Observable<any> {
 let formData = new FormData();
 formData.append("files",files,"files");   
  return this.http.post<Result>(URLConfig.postPhotos+"?userId="+userId, formData);      

}

Я попытался добавить заголовки, такие как multipart / form-data из angular, а также установить его как неопределенное.В любом случае я получаю ошибку.Я много раз искал stackoverflow перед публикацией здесь и пробовал все эти решения без какой-либо помощи.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 10 декабря 2018

Вам необходимо установить тип содержимого как multipart / form-data в заголовках.Измените метод обслуживания, как показано ниже, и попробуйте.

 postPhotos(files: any,userId:any): Observable<any> { 
  const url = "whatever /the/ url is ";
  let headers = new HttpHeaders({
          'Content-Type':'multipart/form-data'
             });
        let options = { headers: headers };
     return this.http.post<Result>(url, formData,options);  
 }

Обратите внимание, что дополнительно вам необходимо также указать тип ответа (т.е. принять) в заголовках.Дайте нам знать, если это работает.

...