The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"tar динамическая упаковка и скачивание"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Изначальное сообщение [ Отслеживать ]

"tar динамическая упаковка и скачивание"  +/
Сообщение от limpoO on 10-Сен-11, 08:11 
Требуется помощь, подскажите как упаковать файлы и отдать их на скачивание пользователю без ожидания завершения компрессации файлов..

кхм.. отдавать то, что успело упаковаться .. как то так..

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "tar динамическая упаковка и скачивание"  +/
Сообщение от sm00th1980 (ok) on 10-Сен-11, 19:47 
> Требуется помощь, подскажите как упаковать файлы и отдать их на скачивание пользователю
> без ожидания завершения компрессации файлов..
> кхм.. отдавать то, что успело упаковаться .. как то так..

как мне кажется задача не так проста как кажется на первый взгляд.
нужно короче смотреть в сторону 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.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "tar динамическая упаковка и скачивание"  +/
Сообщение от limpoO on 11-Сен-11, 11:47 
>[оверквотинг удален]
> чанки в полный архивный файл и после приёма валидировать и выдавать
> пользователю - "Сохранить файл?" - клиентская часть это 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 | Наверх | Cообщить модератору

3. "tar динамическая упаковка и скачивание"  +/
Сообщение от PavelR (ok) on 11-Сен-11, 15:03 
>[оверквотинг удален]
> чанки в полный архивный файл и после приёма валидировать и выдавать
> пользователю - "Сохранить файл?" - клиентская часть это 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 - всё это фантазии.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "tar динамическая упаковка и скачивание"  +/
Сообщение от sm00th1980 (ok) on 11-Сен-11, 15:35 
> Фантазии про JS, Flash, Chunking, NodeJs - всё это фантазии.

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "tar динамическая упаковка и скачивание"  +/
Сообщение от PavelR (ok) on 11-Сен-11, 15:43 
system('tar -c /some/path/* | gzip ');
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "tar динамическая упаковка и скачивание"  +/
Сообщение от sm00th1980 (ok) on 11-Сен-11, 15:56 
> 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'

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "tar динамическая упаковка и скачивание"  +/
Сообщение от PavelR (??) on 11-Сен-11, 20:14 
>> 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'

обязательно.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру