Форум программистов, компьютерный форум, киберфорум
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. Показов 14932. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru