powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / REST загрузка файла
25 сообщений из 27, страница 1 из 2
REST загрузка файла
    #38984922
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создал сервис, загружает файл. как следить за ходом загрузки и отправлять клиенту информацию об этом? (загружено 1%. 2%.. .100%) . вот код загрузки
Код: 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.
@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file){

        if (!file.isEmpty()) {
            try {

                String originalFileName=file.getOriginalFilename();
                String fileExtension= originalFileName.substring(originalFileName.lastIndexOf("."));
                UUID uuid = UUID.randomUUID();
                String name=uuid.toString()+fileExtension;
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name)));
                stream.write(bytes);
                stream.close();
                return name;

            } catch (Exception e) {
                return "You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload file, because the file was empty.";
        }
    }

}

...
Рейтинг: 0 / 0
REST загрузка файла
    #38984927
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взять готовый контрол:
http://blueimp.github.io/jQuery-File-Upload/
...
Рейтинг: 0 / 0
REST загрузка файла
    #38984951
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
мне контрол не нужен. это сервис принимает/возвращает формат-JSON а клиент пишу не я, мне только отправлять информацию а там контрол итп сами создадут на основе этой информации.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38984960
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10мне контрол не нужен. это сервис принимает/возвращает формат-JSON а клиент пишу не я, мне только отправлять информацию а там контрол итп сами создадут на основе этой информации.
Понятно что ничего не понятно. Зачем клиенту отправлять аплоад, если он и сам может за прогрессом следить?
Клиенту можно отправлять прогресс обработки файла, если он долгий. Это делается через COMET или WebSocket, но технологию тут тоже должна диктовать клиентская часть.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38984966
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
как реализовать отправку прогресс обработки файла? посоветуете пжл статью, ссылку или пример, если можно. тот кто пишет клиент, тоже плохо разбирается.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985001
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10,

Я использовал вот эту либу
https://code.google.com/p/jquery-stream
+ Асинхронный Servlet 3.0

Аплоад файла у вас уже есть? Он запускает фоновый поток. - Это желательно делать средствами JEE, так как через Thread/ExecutorService будет геморная утечка класслоадера.

Этот фоновый поток пишет JSON в AsyncContext.getResponse().getWriter();
AsyncContext же создаётся в обработчике "долгого" GET запроса aka COMET и шарится через HashMap.

Этот подход довольно устаревший. jquery-stream уже давно не поддерживается. А вместо COMET все рекомендуют использовать WebSocket - есть даже либы, которые его эмулируют для старых браузеров.
Код для Java по-моему был в jquery-stream примерах. Если надо, могу скинуть примерные наброски. Но я бы рекомендовал поискать что-то посовременнее для решения этого вопроса.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985023
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
да, аплоад уже есть, все прекрасно работает, меня просили отправить клиенту инфо о прогрессе. можно даже просто 1,2,3,4...100. итого 100 раз отправить респонс а он там сам как то реализует у себя UI. я подумал в начале брать MultipartFile-размер и каждый несколько миллесекунд проверять размер файла где хранить буду, перевести на процент и отправить ему это значение. спс вам за подсказку. буду копать в сторону WebSocket.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985029
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10да, аплоад уже есть, все прекрасно работает, меня просили отправить клиенту инфо о прогрессе. можно даже просто 1,2,3,4...100. итого 100 раз отправить респонс а он там сам как то реализует у себя UI. я подумал в начале брать MultipartFile-размер и каждый несколько миллесекунд проверять размер файла где хранить буду, перевести на процент и отправить ему это значение. спс вам за подсказку. буду копать в сторону WebSocket.
Это бред. Конретно аплоад на сервер отправлять клиенту смысла нет. Клиент может сам смотреть сколько он отправил.
Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить. Задача клиента его читать.
Но это хрень. Клиенту не нужно от сервера узнавать сколько же он уже отправил. Он сам отправляет и сам знает сколько ушло.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985036
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz...Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить... можно чуть подробнее, или пример ближе к моему
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985040
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10Blazkowicz...Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить... можно чуть подробнее, или пример ближе к моему
В вашем коде никак, потому что сервер полностью загрузил файл к тому времени как вызовется ваш контроллер.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985047
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугл нашел умников
http://forum.spring.io/forum/spring-projects/web/23482-file-upload-progress-bar
Вот столько приходится уродского кода делать, вместо того чтобы просто смотреть статус на клиенте.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985051
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Код: java
1.
2.
3.
4.
5.
6.
@RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file){
//т.е. здесь уже файл загрузен?
//до вызова getBytes()?
 
                byte[] bytes = file.getBytes();
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985074
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГугл нашел умников
http://forum.spring.io/forum/spring-projects/web/23482-file-upload-progress-bar
Вот столько приходится уродского кода делать, вместо того чтобы просто смотреть статус на клиенте.
наверно они тоже плохо знают яву и их тоже грузили :)
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985154
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10
Код: java
1.
2.
3.
//т.е. здесь уже файл загрузен?
//до вызова getBytes()?
                 byte[] bytes = file.getBytes();

Откуда, по вашему, на диске сервера может взяться файл с данным клиента?
Хотите знать "что-то" в процессе получения данных от клиента - переопределяете doPost() в наследнике и самостоятельно работаете с потоком ввода. Включая разбор того или иного mime-типа.
Чтобы иметь возможность в процессе "чего-то" отвечать клиенту - используете асинхронные сервлеты из 3.0+. Предварительно прочитав спецификацию HTTP предмет "кода 100" и не обижаясь на проксю, которая не поддержит тщательно задуманный авангард.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985174
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov и не обижаясь на проксю, которая не поддержит тщательно задуманный авангард.
Вроде всё нормально с проксей.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985216
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормально, но без гарантий.

P.S. Мне, собственно, вообще непонятно: задлянафига было веб-сокеты придумывать, если всё необходимое можно было сделать в рамках "классического" HTTP, а серверы и пользовательские агенты - и так и так доделки требуют.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985427
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov... переопределяете doPost() в наследнике и самостоятельно работаете с потоком ввода...
т.е. в моем примере RequestMethod.POST? или вообще мой пример не годится?

Basil A. Sidorov...и не обижаясь на проксю, которая не поддержит тщательно задуманный авангард.
если не поддержит, зачем строит этот авангард?
может есть события между поступление запроса и передачи файла, чтоб прописаться и обработать?
и вообще слежка за прогресс загрузки делается в сервере или зная мою тупость(я чайник в этом плане) повесили на меня?
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985454
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10т.е. в моем примере RequestMethod.POST? или вообще мой пример не годится?

Наша песня хороша, начинай сначала?

Basil A. Sidorovвообще слежка за прогресс загрузки делается в сервере или зная мою тупость(я чайник в этом плане) повесили на меня?
Покажи тому кто повесил контрол с прогрессом и скажи что это задача клиента.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985620
ZVER-10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спс за помощь ребята.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985862
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczтак как через Thread/ExecutorService будет геморная утечка класслоадера
А зачем он тут вообще? Application scope bean вполне справится с хранением Мапы НомерСессии->%.
Зачем тут тут еще поток если их и так два?
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985868
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

А это же REST - сервер ничего не должен помнить.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38985934
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев А зачем он тут вообще? Application scope bean вполне справится с хранением Мапы НомерСессии->%.
Зачем тут тут еще поток если их и так два?
Хороший вопрос. Действительно можно оптимизировать.
Просто фоновая обработка файла запускается по POST.
А GET является информативным. Если перенести запуск обработки в GET, то можно и не создавать дополнительных потоков.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38986106
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVER-10если не поддержит, зачем строит этот авангард?Затем, что кроме корректно работающих проксей существуют среды, где прокси вообще не будет.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38986503
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА GET является информативным. Если перенести запуск обработки в GET, то можно и не создавать дополнительных потоков.
Можно даже сделать админку которая будет показывать прогресс всех пользователей загружающих файлы. И статистику кто сколько грузил.
...
Рейтинг: 0 / 0
REST загрузка файла
    #38986547
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевBlazkowiczА GET является информативным. Если перенести запуск обработки в GET, то можно и не создавать дополнительных потоков.
Можно даже сделать админку которая будет показывать прогресс всех пользователей загружающих файлы. И статистику кто сколько грузил.
Ещё одна проблема в том что нотификации в GET надо аккуратно ловить через try...catch, чтобы исключение записи не прервало обработку, если клиент закрыл браузер или просто отвалился.

Поэтому, ИМХО, отдельный поток как-то проще.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / REST загрузка файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]