Как спроектировать таблицу для postgres sql с картинкой и многими другими текстовыми полями при весенней загрузке - PullRequest
0 голосов
/ 24 февраля 2020

Хранение фотографий или больших двоичных файлов в RDMS не рекомендуется. Поэтому я хотел бы сохранить фотографию в файловой системе сервера и сохранить только местоположение фотографии в Postgres SQL. Теперь моя сущность выглядит так: -

@Entity
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
String displayName;

String picturePath;

@NotNull
Date birthDate;

@NotNull
String gender;
}

Класс контроллера как: -

    @PostMapping(path = "/profile")
public ResponseEntity<?> addorUpdateProfile(@RequestBody Profile profile) {
    profileService.saveOrUpdateExpense(profile);
    return new ResponseEntity<>("Expense added succcessfully", HttpStatus.OK);
}

Я должен сохранить фактическую фотографию от пользователя. Поэтому у меня должен быть файл MultipartFile в моем почтовом запросе. Позже я попытался обновить свой контроллер следующим образом:

@PostMapping(path = "/profile")
public ResponseEntity<?> addorUpdateExpense(@RequestBody Profile profile, @RequestParam("file") MultipartFile file) {
    // I will save the file here. 
    profileService.saveOrUpdateExpense(profile);
    return new ResponseEntity<>("Expense added succcessfully", HttpStatus.OK);
}

Но я пытаюсь почтальоном получить сообщение об ошибке: -

{
    "timestamp": "2020-02-24T16:48:24.117+0000",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'multipart/form-data;boundary=--------------------------427089632904546982882381;charset=UTF-8' not supported",
    "path": "/profile"
}

Запрос почтальона: -

enter image description here

Как мне спроектировать мой стол или контроллер? Чтобы соответствовать этим требованиям?

1 Ответ

0 голосов
/ 25 февраля 2020

Мне удалось сделать это следующим образом: -

    @PostMapping(path = "/profile" , consumes = {"multipart/form-data"})
    public ResponseEntity<?> addOrUpdateProfile(@RequestPart("profile") Profile profile,  @RequestParam("file") MultipartFile file) {
    System.out.println("file name:"+file.getOriginalFilename()+" file is here. Save it");
    profileService.saveOrUpdateExpense(profile);
    return new ResponseEntity<>("Profile added succcessfully", HttpStatus.OK);
}

Для тестирования с помощью curl попробуйте этот пост-запрос: -

curl -X POST -H 'Content-Type: multipart/form-data'  -F profile='{ "displayName": "ma ma",  "birthDate": "1999-01-01", "gender": "male"};type=application/json' -F file=@'/home/dev/Downloads/file.pdf;type=application/octet-stream'   http://localhost:8080/profile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...