Подтвердить что ты не робот

Невозможно получить изображение из формы spring

при извлечении файла из spring form Я получаю значение null, и если я попробую этот код для остальной части полей, я имею в виду, что multipart input types работает нормально. во время отладки я получаю значение null из строки. Если я попытаюсь извлечь image из существующей папки i'e изображения под webapp и этот url способен отображать изображение в браузере, но не способен читать значение из files с помощью браузера и извините за мой плохой английский

изменить, если я прокомментирую код изображения, приложение работает нормально, но когда я представляю код для изображения, я получаю сообщение об ошибке

MultipartFile file = domain.getImage(); //this is getting null

это релевантный код контроллер

@RequestMapping(value = "/form", method = RequestMethod.GET)
    public String formInputGet(Model model) {
        model.addAttribute("domain", new Domain());
        return "form";
    }



@RequestMapping(value = "/form", method = RequestMethod.POST)
        public String formInputPost(@ModelAttribute("domain") Domain domain, HttpServletRequest httpServletRequest) {

            MultipartFile file = domain.getImage();
if (image== null)
            throw new NullPointerException("unable to fetch "+file); //getting NPE everytime
            String rootDirectory = httpServletRequest.getSession().getServletContext().getRealPath("/");
            if (domain.getImage() != null && !domain.getImage().isEmpty())
                try {
                    File path = new File(rootDirectory + "images\\" + domain.getFirstName() + ".png");
                    file.transferTo(path);
                } catch (IllegalStateException | IOException e) {
                    e.printStackTrace();
                }
            repositiry.addToList(domain);
            return "redirect:/";
        }

form.jsp

<form:form modelAttribute="domain" enctype="multipart/form-data">
    First Name<br>
        <form:input path="firstName" />
        <br>Last Name :<br>
        <form:input path="lastName" />
        <br>upload Image<br>
        <form:input path="image" type="file" />
        <hr>
        <input type="submit">
    </form:form>

DispatcherServlet

<mvc:annotation-driven />
    <mvc:resources location="/images/" mapping="/images/**" />
    <context:component-scan base-package="com" />
    <bean id="multipartReslover"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10240000" />
    </bean>
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

Я добавил дополнительный код, чтобы найти, получаю ли я domain, поскольку null стал true. И у меня нет идеи, как это решить.

после добавления проверки на файл я получаю ошибку

java.lang.NullPointerException: unable to fetch : null

domain.java

public class Domain {
    private String firstName;
    private String lastName;
    private MultipartFile image;

//getters and setters

ПРИМЕЧАНИЕ любой полезный ответ, если он имеет другой способ работы, тоже приветствуется:)

любая помощь приветствуется, спасибо:)

4b9b3361

Ответ 1

В моем файле конфигурации было два опечатки, поскольку они

1) <mvc:resources location="/images/" mapping="/images/**" /> здесь отображение должно было быть как mapping ="images/**"

2) File path = new File(rootDirectory + "images\\" + domain.getFirstName() + ".png"); здесь путь должен быть как rootDirectory+"\\images\\"+.... вместо

Ответ 2

вы должны сделать все, что сказал @kuhajeyen, и если получение изображения с объекта домена не получилось, вы можете попробовать это

public String formInputPost(@ModelAttribute("domain") Domain domain,
                            @RequestParam("image") MultipartFile imagefile,
                            HttpServletRequest httpServletRequest ) {

                            imagefile.transferTo(path);

                            }

изменить: - изменить method атрибут POST внутри формы, иначе он сделает запрос GET.

<form:form modelAttribute="domain" method="post" enctype="multipart/form-data">

и замените файл типа ввода на эту строку, я думаю, что есть некоторые проблемы при попытке связать файл типа ввода с объектом.

<input type="file" name="image" />

Ответ 3

Вам нужно сообщить spring, как разрешить многостраничный файл

добавьте этот bean

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="409600"/>
</bean> 

И также кажется, что вы не отобразили свое действие в форме

<form:form modelAttribute="domain" enctype="multipart/form-data" action="xxxx/form">
....

</form:form>