The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
tar динамическая упаковка и скачивание, !*! limpoO, 10-Сен-11, 08:11  [смотреть все]
Требуется помощь, подскажите как упаковать файлы и отдать их на скачивание пользователю без ожидания завершения компрессации файлов..

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

  • 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'

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




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

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