Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361

Загрузка файла Spring MVC

12.07.2016, 23:15. Показов 1609. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Никак не могу реализовать загрузку файла(картинки) через форму на сайте. Пытался и так http://www.mkyong.com/spring-m... d-example/ и так http://javastudy.ru/spring-mvc... oad-files/

форма JSP

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<jsp:include page="header.jsp"/>
 
<div class="container" align="center">
    <h5 class="text-center">Добавление</h5>
<div class="col-lg-12" align="center">
<form:form modelAttribute="driver" action="${pageContext.request.contextPath}/confidential/addNewDriver" method="post"
           acceptCharset="UTF-8">
    <table class="table-bordered">
        <tr>
            <td><form:label path="number">Номер:</form:label></td>
            <td><form:input path="number" /></td>
 
        </tr>
        <tr>
            <td><form:label  path="description">Описание:</form:label></td>
            <td ><form:textarea  path="description"/></td>
 
        </tr>
        <tr>
            <td><input type="submit" value="Отправить"></td>
        </tr>
 <tr><input type="file" name="file"></tr>
                <tr>
                    <td><input type="submit" value="Отправить"></td>
                </tr>
 
    </table>
</form:form>
    </div>
</div>
 
<jsp:include page="footer.jsp"/>

контролер:


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package ap.controller;
 
import ap.DAO.DriverDAO;
import ap.entity.BDriver;
import ap.entity.DriverImage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
@SessionAttributes("search")
public class DriverController {
 
    @Autowired
    DriverDAO driverDAO;
 
    /**The Controller add new bDriver in BD
     * @param bDriver
     * @return
     */
    @RequestMapping(value = "/confidential/addNewDriver", method = RequestMethod.POST)
    public ModelAndView addNewBadDriver(@ModelAttribute("driver")BDriver bDriver){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("addDriver");
        modelAndView.addObject("driver", new BDriver());
        bDriver.setNumber(bDriver.getNumber().toLowerCase());
        //TODO реализовать форму и добавление картинки к обьекту и в базу
        DriverImage driverImage = new DriverImage(); // entity for image
        driverDAO.add(bDriver);
        return modelAndView;
}
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2016, 23:15
Ответы с готовыми решениями:

Путь для сохранения файла на сервере (Spring Hibernate MVC)
Добрый день. Фйал загружает, пользователь в форме и передает на сервер. А какой правильно путь для сохранения указывать. Раньше для...

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

Перевод проекта из Spring Maven в обычный Spring MVC
Здравствуйте. Подскажите, реально ли взять готовый проект, например -...

9
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
14.07.2016, 12:16
А где вы файл сохраняете DTO, Controller ?
Я бы попробовал первое

HTML5
1
<form весь Ваш код + enctype="multipart/form-data">
Если не поможет покажите DTO/Controller

Добавлено через 5 минут
еще желательно указать
Java
1
@RequestMapping(value = "/confidential/addNewDriver", method = {RequestMethod.GET, RequestMethod.POST})
У меня было пару раз пока не дал GET не хотело работать.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
14.07.2016, 19:17  [ТС]
Файл планирую сохранять в папку на серевере и хранить ссылку на него в БД(постгрес)

А добавлять во входящие праметры метода вот такую строку надо: @RequestParam("file") MultipartFile file)? И потом файл, читать просто через BufferedOutputStream?

Java
1
2
3
4
5
6
7
8
9
10
@RequestMapping(value = "/confidential/addNewDriver", method = RequestMethod.POST)
    public ModelAndView addNewBadDriver(@ModelAttribute("driver")BDriver bDriver, @RequestParam("file") MultipartFile file)){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("addDriver");
        modelAndView.addObject("driver", new BDriver());
        bDriver.setNumber(bDriver.getNumber().toLowerCase());
        //TODO реализовать форму и добавление картинки к обьекту и в базу
        DriverImage driverImage = new DriverImage(); // entity for image
        driverDAO.add(bDriver);
        return modelAndView;
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
16.07.2016, 14:56  [ТС]
Не понимаю, что не так?
Сделал бин
Java
1
2
3
4
5
6
 @Bean
    CommonsMultipartResolver getResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(5000000);
        return resolver;
    }
сделал форму
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
<head>
    <title>Upload</title>
</head>
<body>
<form:form modelAttribute="driver" enctype="multipart/form-data" action="${pageContext.request.contextPath}/addNewDriverTest" method="post"
           acceptCharset="UTF-8">
    <table class="table-bordered">
       <tr>
            <td><input type="file" name="file"></td>
 
 
        </tr>
        <tr>
            <td><input type="submit" value="Отправить"></td>
        </tr>
 
    </table>
</form:form>
 
 
</body>
</html>

контролер
первый метод выдает страницу с формой выше, второй соответственно ее обрабатывает, в теле хотел получить хотя бы вывод в консоль имени файла.

Java
1
2
3
4
5
6
7
8
9
10
 @RequestMapping(value = "test")
    public  String  addFile() {
        return "testUpload";
 
    }
    @RequestMapping(value = "/addNewDriverTest", method = RequestMethod.POST)
    public void addTestFile(@RequestParam("file") MultipartFile file){
        System.out.println("попал в метод");
        System.out.println(file.getName());
    }

в итотге после кнопки субмит получаю ошибку :

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
 
type Exception report
 
message Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
 
description The server encountered an internal error that prevented it from fulfilling this request.
 
exception
 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:980)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:133)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
0
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
16.07.2016, 16:25
werrt, тип возвращаемый в бине сделай MultipartResolver

Добавлено через 6 минут
хотя это не должно решить проблемы. Проверь если бин приваривается.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
16.07.2016, 21:56  [ТС]
нет, не решает
0
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
16.07.2016, 22:03
А, знаю. Пишут что имя бина должно быть multipartResolver, то есть сделай так:
Java
1
2
@Bean
public CommonsMultipartResolver multipartResolver(){
или так
Java
1
2
@Bean(name = "multipartResolver")
public CommonsMultipartResolver getResolver(){
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
17.07.2016, 20:33  [ТС]
Переустановил все на убунту. Переписал в соответсвие c ninjacut

получаю:
HTML5
1
2
3
4
HTTP Status 400 - Required MultipartFile parameter 'driver' is not presenttype Status report
message Required MultipartFile parameter 'driver' is not present
description The request sent by the client was syntactically incorrect.
Apache Tomcat/9.0.0.M9
0
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
17.07.2016, 20:51
Лучший ответ Сообщение было отмечено werrt как решение

Решение

Так добавь параметр modelattribute driver, или удали его из html ты же его не используешь...
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
17.07.2016, 21:02  [ТС]
Семен Семеныч... ЧТо то я ступил. Спасибо. Вроде получил в контролере файл, покранйе мере вроде имя в консоль вывелось. Продолжу дальше копать )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2016, 21:02
Помогаю со студенческими работами здесь

задания по spring core и spring mvc для новичков
Какие задания можно предложить новичкам для выполнения после знакомства их с spring core и mvc ?

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Spring mvc spring jdbc
Простое веб приложение с использованием Spring mvc + jdbc(JdbcTemplate). Можно добавить запись в таблицу или вывести список данных из...

Spring MVC, Spring REST
Всем привет! Изучаю фреймворк Spring и возникло несколько вопросов в процессе, на которые не уверен однозначно, что до конца понимаю....

Spring Multi Part загрузка файла и ошибка при подключении bean id multipartResolver
Пытаюсь реализовать upload файла-картинки на сервер на базе MultiPart механизма Spring В контроллере POST примерно так ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru