Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/75: Рейтинг темы: голосов - 75, средняя оценка - 4.61
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82

MultipartFile Spring MVC, как сохранить файл и вытащить назад на View

03.10.2015, 15:00. Показов 15096. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. У меня есть метод в сервисе, которые сохраняет файл(картинку) в базу и локально на ПК. Как вытящаить назад картинку из базы, я не понял. Так и не вытащил, только один раз оутпут стримом, но мне всегда предлагало ее скачать. это не подходит. Тогда решил, сохранять локально в проекте, но получается, только в системе папок ПК.
1) подскажите пожалуйста, как сохранять картинку прямо в папку /resources/image/ в стурктуре проекта.
2) как ее потом оттуда вытащить на view)

спасибо.


Сервис:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
    public boolean saveFile(MultipartFile multipartFile) {
 
                public static final String SAVE_LOCATION = "C:/Users/User/Desktop/traceplace/traceplace/src/main/webapp/resources/image/";
 
        boolean result = false;
        String fileName = multipartFile.getOriginalFilename();
        String location = SAVE_LOCATION;
        File pathFile = new File(location);
        if (!pathFile.exists()) {
            pathFile.mkdir();
        }
 
        pathFile = new File(location + fileName);
        try {
            multipartFile.transferTo(pathFile);
            result = true;
        } catch (IOException e) {
                e.printStackTrace();
        }
 
        return result;
    }
Контроллер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RequestMapping(value="/savePlaceType", method=RequestMethod.POST)
    public String savePlace(PlaceTypeForm placeTypeForm, HttpServletRequest request,
            HttpServletResponse response) throws ServletRequestBindingException, IOException{
        
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartRequest.getFile("file");
         
        fileService.saveFile(multipartFile);
        PlaceType placeType = new PlaceType();
        placeType.setName(placeTypeForm.getName());
        placeTypeService.addPlaceType(placeType);
        System.out.println("adding complite");
        
        return "redirect:addNewPlaceType";
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2015, 15:00
Ответы с готовыми решениями:

Spring MVC Как вытащить из модели атрибут поменять его формат и вставить обратно
Имеется модель которая формируется из данных базы @RequestMapping(value = "/", method = RequestMethod.GET) public String...

spring-mvc передача данных из контроллера в view
у меня возникла проблема. пробую писать жалкое подобие сайта на Java. и мне необходимо передавать данные между контроллером и вьюхой....

Spring mvc pdf view не работает с русским теском
Всем привет! В spring mvc не обходимо создать контролер который будет возврщать pdf документ. Нашел две библиотеки которые позволяют...

12
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 16:30
Лучший ответ Сообщение было отмечено trembling как решение

Решение

Цитата Сообщение от trembling Посмотреть сообщение
подскажите пожалуйста, как сохранять картинку прямо в папку /resources/image/ в стурктуре проекта.
ненадо её там сохранять. Сохраняйте на диске. В БД храните линк. Затем смотрите сюда если у вас томкат
http://stackoverflow.com/quest... -in-a-java

Если нет, гуглите аналогию для вашего сервера

Лучше всего поставить apache http server и дать ему выполнять эту работу.

Цитата Сообщение от trembling Посмотреть сообщение
как ее потом оттуда вытащить на view
подставляете линк который замаплен как показано выше
1
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 18:46  [ТС]
Спасибо, сейчас буду разбирать. Да томкат стоит.

Добавлено через 8 минут
Я честно говоря, что-то вообще не доганяю, что он там делает. Он в одном методы и загружает файл и выгружает его потом? А как мне его выгрузить именно туда, куда мне надо? Надо записать последнюю строку в какой-то стринг, котоырй я передам или что там такое ((

Добавлено через 7 минут
Java
1
Files.copy(pathFile.toPath(), response.getOutputStream());
эта строка вообще возвращает лонг. что к чему куда лепить. хоть бы один нормальный док был по тому, как это можно сделать.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 18:48
trembling, вас там больше интересует это

XML
1
<Context path="/myproj/images" docBase="e:/myproj/" crossContext="false" debug="0" reloadable="true" privileged="true" />
То есть файлы из директории e:/myproj/ будут доступны по линку /myproj/image
0
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 19:00  [ТС]
у меня в веб.хмл уже есть такой контекст
XML
1
  <Context docBase="traceplace" path="/traceplace" reloadable="true" source="org.eclipse.jst.jee.server:traceplace"/>
получется, если мне надо загружать изображения в папку проекта "/resources/image", надо сделать так:
XML
1
      <Context path="/resources/images" docBase="C:/Users/User/Desktop/traceplace/traceplace/src/main/webapp/resources/image/" crossContext="false" debug="0" reloadable="true" privileged="true" />
??
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 19:01
trembling, ещё раз. Ненадо загружать ничего в папки проекта.
0
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 19:12  [ТС]
у меня уровень англ хороший, но я честно.. извините "них*ра") не понимаю, что тот парень написал и что он сделал. если не сложно, можно как-то в 2-3 словах, но более подробно, что и как должно быть, потому что я уже плачу здесь из-за этих изображений.

Добавлено через 5 минут
получается, если проект будет загружен на другом ПК, у него уже не будет этой ссылки откуда брать и куда положить изображения и надо будет и в его сервер.хмл прописывать этот путь?

Добавлено через 2 минуты
вот у меня есть класс. в его поле файл, надо загрузить изображения, чтобы потом из того же поля вывести на вью.
какой должен быть тип поля и что должно сохраняться, выгружаться. ничего не понятно и уже 3й день рою интернет, не могу найти ни одного нормально туториала.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
@Table(name="place_type")
public class PlaceType {
 
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Long id;
    
    @JoinColumn(name = "name")
    private String name;
    
    @JoinColumn(name="file")
    private byte[] file;
 
    @OneToMany(mappedBy="placeType", fetch=FetchType.EAGER)
    private Set<Place> places = new HashSet<Place>();
        // getters setters
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 19:15
Цитата Сообщение от trembling Посмотреть сообщение
получается, если проект будет загружен на другом ПК
веб приложение обычно устанавливается на один ПК и оттуда работает. Захотите перенести на другой, создайте там папку для картинок.

Цитата Сообщение от trembling Посмотреть сообщение
должен быть тип поля и что должно сохраняться
Имя файла и путь к нему на локальном диске. Саму картинку ненадо хранить в БД
1
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 19:17  [ТС]
Я добавил этот контест в томкат и тепер он фейлится при запуске.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 19:30
trembling, забыл свой магический шар, придется вам написать сюда ошибку
1
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 19:46  [ТС]
сейчас в браузере при попытки загрузить файл из указаного пути, выбивает следующею ошибку:

Not allowed to load local resource: file:///C:/Users/User/Desktop/traceplace/traceplace/src/main/webapp/resources/image/pub-11.jpg

Добавлено через 3 минуты
вообщем. я вроде как начинаю что-то доганять) сейчас попробую сделать. если не получиться. напишу еще)
спасибо.

Добавлено через 11 минут
вот ошибка которую выбивает томкат.

Server Tomcat v8.0 Server at localhost failed to start.

вот сам сервер.хмл

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
 
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
 
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
 
      <Context docBase="traceplace" path="/traceplace" reloadable="true" source="org.eclipse.jst.jee.server:traceplace"/>
      <Context path="D:/image/" docBase="/image/" crossContext="false" debug="0" reloadable="true" privileged="true" />
      </Host>
метод, который работает с файлом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static final String SAVE_LOCATION = "/image/";
 
    @Override
    public String saveFile(MultipartFile multipartFile) {
 
        String fileName = multipartFile.getOriginalFilename();
        String location = SAVE_LOCATION;
        File pathFile = new File(location);
        if (!pathFile.exists()) {
            pathFile.mkdir();
        }
 
        pathFile = new File(location + fileName);
        try {
            multipartFile.transferTo(pathFile);
        } catch (IOException e) {
                e.printStackTrace();
        }
        
        return location+multipartFile.getOriginalFilename();
    }
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.10.2015, 19:57
Лучший ответ Сообщение было отмечено trembling как решение

Решение

Цитата Сообщение от trembling Посмотреть сообщение
<Context path="D:/image/" docBase="/image/"
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
<Context path="/myproj/images" docBase="e:/myproj/"
найди 10 отличий

Цитата Сообщение от trembling Посмотреть сообщение
от ошибка которую выбивает томкат.
Server Tomcat v8.0 Server at localhost failed to start.
это не ошибка. Ошибка в логах. Это сообщение что томкат не поднялся.
1
 Аватар для trembling
4 / 4 / 0
Регистрация: 28.03.2015
Сообщений: 82
03.10.2015, 20:04  [ТС]
понял, не дурак

все работает. СПАСИБО ОГРОМНОЕ!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2015, 20:04
Помогаю со студенческими работами здесь

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

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

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

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

Вытащить текст и сохранить в файл
Здравствуйте. Есть 30 текстовых файлов, в них 1 строка с содержанием такого типа:...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru