Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / REST загрузка файла / 25 сообщений из 27, страница 1 из 2
16.06.2015, 15:28
    #38984922
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
создал сервис, загружает файл. как следить за ходом загрузки и отправлять клиенту информацию об этом? (загружено 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
16.06.2015, 15:33
    #38984927
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Взять готовый контрол:
http://blueimp.github.io/jQuery-File-Upload/
...
Рейтинг: 0 / 0
16.06.2015, 15:51
    #38984951
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Blazkowicz,
мне контрол не нужен. это сервис принимает/возвращает формат-JSON а клиент пишу не я, мне только отправлять информацию а там контрол итп сами создадут на основе этой информации.
...
Рейтинг: 0 / 0
16.06.2015, 15:59
    #38984960
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
ZVER-10мне контрол не нужен. это сервис принимает/возвращает формат-JSON а клиент пишу не я, мне только отправлять информацию а там контрол итп сами создадут на основе этой информации.
Понятно что ничего не понятно. Зачем клиенту отправлять аплоад, если он и сам может за прогрессом следить?
Клиенту можно отправлять прогресс обработки файла, если он долгий. Это делается через COMET или WebSocket, но технологию тут тоже должна диктовать клиентская часть.
...
Рейтинг: 0 / 0
16.06.2015, 16:05
    #38984966
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Blazkowicz,
как реализовать отправку прогресс обработки файла? посоветуете пжл статью, ссылку или пример, если можно. тот кто пишет клиент, тоже плохо разбирается.
...
Рейтинг: 0 / 0
16.06.2015, 16:33
    #38985001
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
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
16.06.2015, 16:50
    #38985023
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Blazkowicz,
да, аплоад уже есть, все прекрасно работает, меня просили отправить клиенту инфо о прогрессе. можно даже просто 1,2,3,4...100. итого 100 раз отправить респонс а он там сам как то реализует у себя UI. я подумал в начале брать MultipartFile-размер и каждый несколько миллесекунд проверять размер файла где хранить буду, перевести на процент и отправить ему это значение. спс вам за подсказку. буду копать в сторону WebSocket.
...
Рейтинг: 0 / 0
16.06.2015, 16:53
    #38985029
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
ZVER-10да, аплоад уже есть, все прекрасно работает, меня просили отправить клиенту инфо о прогрессе. можно даже просто 1,2,3,4...100. итого 100 раз отправить респонс а он там сам как то реализует у себя UI. я подумал в начале брать MultipartFile-размер и каждый несколько миллесекунд проверять размер файла где хранить буду, перевести на процент и отправить ему это значение. спс вам за подсказку. буду копать в сторону WebSocket.
Это бред. Конретно аплоад на сервер отправлять клиенту смысла нет. Клиент может сам смотреть сколько он отправил.
Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить. Задача клиента его читать.
Но это хрень. Клиенту не нужно от сервера узнавать сколько же он уже отправил. Он сам отправляет и сам знает сколько ушло.
...
Рейтинг: 0 / 0
16.06.2015, 16:58
    #38985036
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Blazkowicz...Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить... можно чуть подробнее, или пример ближе к моему
...
Рейтинг: 0 / 0
16.06.2015, 17:02
    #38985040
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
ZVER-10Blazkowicz...Если нужен только аплоад, можно JSON прогресс писать в Response и сразу флашить... можно чуть подробнее, или пример ближе к моему
В вашем коде никак, потому что сервер полностью загрузил файл к тому времени как вызовется ваш контроллер.
...
Рейтинг: 0 / 0
16.06.2015, 17:06
    #38985047
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
Гугл нашел умников
http://forum.spring.io/forum/spring-projects/web/23482-file-upload-progress-bar
Вот столько приходится уродского кода делать, вместо того чтобы просто смотреть статус на клиенте.
...
Рейтинг: 0 / 0
16.06.2015, 17:10
    #38985051
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
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
16.06.2015, 17:27
    #38985074
ZVER-10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
BlazkowiczГугл нашел умников
http://forum.spring.io/forum/spring-projects/web/23482-file-upload-progress-bar
Вот столько приходится уродского кода делать, вместо того чтобы просто смотреть статус на клиенте.
наверно они тоже плохо знают яву и их тоже грузили :)
...
Рейтинг: 0 / 0
16.06.2015, 18:32
    #38985154
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REST загрузка файла
ZVER-10
Код: java
1.
2.
3.
//т.е. здесь уже файл загрузен?
//до вызова getBytes()?
                 byte[] bytes = file.getBytes();

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

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

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

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

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

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

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


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