- tar динамическая упаковка и скачивание, sm00th1980, 19:47 , 10-Сен-11 (1)
> Требуется помощь, подскажите как упаковать файлы и отдать их на скачивание пользователю > без ожидания завершения компрессации файлов.. > кхм.. отдавать то, что успело упаковаться .. как то так..как мне кажется задача не так проста как кажется на первый взгляд. нужно короче смотреть в сторону HTTP streaming решений(если у вас транспорт конечно HTTP). Т.е. надо чанки уже готовые на сервер-сайде отдавать по HTTP-каналу(постоянно открытому причём - что уже не тривиально). + ещё клиентская сторона - должна держать это соединение - и собирать чанки в полный архивный файл и после приёма валидировать и выдавать пользователю - "Сохранить файл?" - клиентская часть это JS. Вот вроде набор фреймворков для подобного решения: http://ajaxpatterns.org/HTTP_Streaming А вот похожее решение на базе Node.js http://stackoverflow.com/questions/2558606/stream-data-with-... Также рекомендую использовать готовую библиотеку(http://socket.io/#how-to-use)- т.к. стриминг в каждом браузере может быть по разному реализован - кто-то умеет web sockets а кто-то только flash. Библиотека-обёртка берёт все эти сложности на себя предоставля высокоуровнее API.
- tar динамическая упаковка и скачивание, limpoO, 11:47 , 11-Сен-11 (2)
>[оверквотинг удален] > чанки в полный архивный файл и после приёма валидировать и выдавать > пользователю - "Сохранить файл?" - клиентская часть это JS. > Вот вроде набор фреймворков для подобного решения: > http://ajaxpatterns.org/HTTP_Streaming > А вот похожее решение на базе Node.js > http://stackoverflow.com/questions/2558606/stream-data-with-... > Также рекомендую использовать готовую библиотеку(http://socket.io/#how-to-use)- т.к. > стриминг в каждом браузере может быть по разному реализован - кто-то > умеет web sockets а кто-то только flash. Библиотека-обёртка берёт все эти > сложности на себя предоставля высокоуровнее API.Премного благодарен!.. буду ковырять в эту сторону.. Ещё раз спасибо!
- tar динамическая упаковка и скачивание, PavelR, 15:03 , 11-Сен-11 (3)
>[оверквотинг удален] > чанки в полный архивный файл и после приёма валидировать и выдавать > пользователю - "Сохранить файл?" - клиентская часть это JS. > Вот вроде набор фреймворков для подобного решения: > http://ajaxpatterns.org/HTTP_Streaming > А вот похожее решение на базе Node.js > http://stackoverflow.com/questions/2558606/stream-data-with-... > Также рекомендую использовать готовую библиотеку(http://socket.io/#how-to-use)- т.к. > стриминг в каждом браузере может быть по разному реализован - кто-то > умеет web sockets а кто-то только flash. Библиотека-обёртка берёт все эти > сложности на себя предоставля высокоуровнее API.Фантазия это конечно хорошо, но лучше будет, если фантазия будет основываться на _понимании_. 1) Если не критично, какой тип архива будет использоваться для передачи, то nginx + модуль zip умеет в потоке отдавать файлы, собранные воедино, но без компрессии. 2) Если это нечто самописное, то наверное вам нужен поточный архиватор типа связки tar + gz. ну а дальше - gz умеет выдавать сжатый поток на stdout. Вывода на stdout как раз и ожидают веб-сервера, исполняющие скрипты. Т.е. нужно в коде вашего скрипта сделать system ('tar -czf /path/') и всё. Фантазии про JS, Flash, Chunking, NodeJs - всё это фантазии.
- tar динамическая упаковка и скачивание, sm00th1980, 15:35 , 11-Сен-11 (4)
> Фантазии про JS, Flash, Chunking, NodeJs - всё это фантазии.вполне допускаю что я подошёл с излишне программистской точки зрения :) и вариант с потоковым выводом рабочий - нужно экспериментировать. - tar динамическая упаковка и скачивание, PavelR, 15:43 , 11-Сен-11 (5)
system('tar -c /some/path/* | gzip ');
- tar динамическая упаковка и скачивание, sm00th1980, 15:56 , 11-Сен-11 (6)
> system('tar -c /some/path/* | gzip '); вариант слегка не рабочий:( может какие-то ключики поправить? sm00th@dev:~$ tar -c django/admintool/* | gzip gzip: compressed data not written to a terminal. Use -f to force compression. For help, type: gzip -h а ну да сказано что "-f" добавить же:) + надо HTTP-header будет добавить(MimeType, Content-Disposition) - чтобы браузер понял что это бинарный файл а не страничка - типа так: mimetype='application/vnd.ms-excel' Content-Disposition= 'attachment; filename=%s'
- tar динамическая упаковка и скачивание, PavelR, 20:14 , 11-Сен-11 (7)
>> system('tar -c /some/path/* | gzip '); > вариант слегка не рабочий:( может какие-то ключики поправить?помоему при вызове из system() будет работать, потому что оно поймет что это не терминал (вроде). > sm00th@dev:~$ tar -c django/admintool/* | gzip > gzip: compressed data not written to a terminal. Use -f to force > compression. > For help, type: gzip -h > а ну да сказано что "-f" добавить же:) > + надо HTTP-header будет добавить(MimeType, Content-Disposition) - чтобы браузер понял > что это бинарный файл а не страничка - типа так: > mimetype='application/vnd.ms-excel' > Content-Disposition= 'attachment; filename=%s' обязательно.
|