• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Formularz z możliwością wysłania pliku - SpringBoot + Thymeleaf

Object Storage Arubacloud
0 głosów
521 wizyt
pytanie zadane 8 stycznia 2017 w Java przez Ola Kalisz Początkujący (320 p.)

Hej:) Mam problem z uploadem pliku w Spring Boot.

Tak wygląda mój formularz: http://pastebin.com/X41sNgbn

 

Jest tam kilka inputów typu "text" oraz jeden typu "file". W kontrolerze przechwytuję dane za pomocą : @ModelAttribute(value = "product") Product product

Wszystko się pobiera (dane z pól tekstowych + nazwa zdjęcia).

Teraz chcę zrobić upload pliku. Robię tak jak tutaj: https://github.com/hellokoding/uploadingfiles-springboot

I jeśli przyjmuje w kontrolerze sam: @RequestAttribute(value = "image") MultipartFile uploadingFile - wszystko działa, plik się wgrywa, kopiuje we wskazaną lokalizację. 

Tylko, że ja oprócz tego chcę też przechwycić i wrzucić do bazy dane całego formularza, więc do argumentu metody w kontrolerze dodaje mój @ModelAttribute.

Moja metoda wygląda w całości tak:

public String adminAddProductSubmit(final @ModelAttribute(value = "product") Product product,
                                       final @RequestAttribute(value = "image") MultipartFile uploadingFile)

 

No i niestety nie działa. 

Może mi ktoś pomóc, wskazać jak przesłać ten plik i jednocześnie odebrać dane obiektu Product?

 

Z góry wielkie dzięki!

komentarz 8 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
A wyskakuje Ci jakiś bład albo coś?
komentarz 8 stycznia 2017 przez Ola Kalisz Początkujący (320 p.)

Tak:

Field error in object 'product' on field 'image': rejected value [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@f3d1a20]; codes [typeMismatch.product.image,typeMismatch.image,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [product.image,image]; arguments []; default message [image]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'java.lang.String' for property 'image'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'java.lang.String' for property 'image': no matching editors or conversion strategy found]
....

 

Oraz:


org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'timestamp' cannot be found on object of type 'java.util.HashMap' - maybe not public?
	at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) ~[spring-expression-4.3.5.RELEASE.jar:4.3.5.RELEASE]
....

 

komentarz 8 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Mogła byś jeszcze wkleić obiekt produkt?
komentarz 8 stycznia 2017 przez Ola Kalisz Początkujący (320 p.)

http://pastebin.com/VCWgNMNB  - model "Product"

W formularzu ustawiam: <form th:action="@{/admin/add}" th:object="${product}" class="form-horizontal" method="post" enctype="multipart/form-data">

Następnie wszystkie pola mojego "modelu" wraz z "image". 

 

Czy kontroler może w ogóle przyjmować @ModelAtribute z formularza + @RequestAttribute który jest w tym modelu?

komentarz 8 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Chyba wiem gdzie masz bład. Z opisu błedu i z kodu który przesłałaś wydaje mi się ze problemem jest to ze pole image to string. A w formularzu wysyłasz file który jest mapowany na MultipartFile. Przez to program głupieje bo nie wie jak dokonać konwersji pliku w stringa.

Wydaje mi się że rozwiazaniem powino być zmaina pola na MultipartFile. Wtedy nie powinnien być Ci potrzebny ten @RequestAttribute.

A czy można przyjmować. Szczerze powiem nigdy tak nie robiłem wiec nawet nie wiem.
komentarz 9 stycznia 2017 przez Ola Kalisz Początkujący (320 p.)
Dzięki za odpowiedź. Tylko, że jak zmienię pole na MultipartFile to jak wtedy ddoam do bazy mój obiekt "product", który przejmowałam wcześniej?

Nie ma jakiegoś schematu jak tworzyć formularze z rónymi inputami + uploadem? W dokumentacji Springa jest tylko formularz uploadu, tak jak w większości tutoriali, a to przecież taka standardowa rzecz :(
komentarz 9 stycznia 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Rozwiazaniem moze byc stworzenie obiektu typu dto. Ktory bedzie pobieral dane z formularza a na podstawiw tych danych bedziesz tworzyc obiekt dla bazy danych. Dodatkowo bedziesz mogla wprowadzic validacje danych. Sprawdz hibernate validator

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 4 grudnia 2023 w PHP przez pm.epoczta Nowicjusz (120 p.)
0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 19 lutego 2019 w Java przez anonymousProgrammer Początkujący (350 p.)
0 głosów
1 odpowiedź 1,394 wizyt
pytanie zadane 26 stycznia 2019 w Java przez niezalogowany

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...