PDA

Просмотр полной версии : Загрузка файлов по http


Krasyuk
16.02.2006, 11:14
Привет, All!

Есть такая проблема: имеется большой архив файлов на веб - сервере,
пользователь должен иметь возможность через форму (cgi - скрипт на perl)
отобрать группу файлов и загрузить их в удобном виде. Неясности именно с
загрузкой. Опыта в разработке веб - приложений маловато поэтому помогите :)
Главное требование - не создавать временных файлов на сервере для создания
архива загружаемых файлов и т.п.

Пока выгрузку представляю либо путем создания архива файлов, при этом
архиватор выводит архив на стандартный вывод, который передается
пользователю в браузер. Тут вопрос: архиватор (ориентируюсь на 7zip) сначала
создаст архив во временном файле и потом его выведет через стандартный вывод
(так мне не подходит) или временных файлов создаваться не будет?
Либо в одном ответе сервера передавать несколько файлов, но что-то я не
видел, чтобы браузер по одной ссылке загружал несколько файлов. Или такое
всеж бывает?

Подскажите ответы на вопросы, если есть примеры решений не сочтите за
труд поделится, или может я вообще не правильно все представляю и есть
простой и проверенный путь решения подобных проблем - поделитесь.

Уф, спасибо за внимание! :)

Hubbitus
17.02.2006, 11:26
Krasyuk:
Тут вопрос: архиватор (ориентируюсь на 7zip) сначала
создаст архив во временном файле и потом его выведет через стандартный вывод
(так мне не подходит) или временных файлов создаваться не будет?
А почему собственно не подходит?? Вообще, если вывод делать сразу в stdout, то в привычном смысле файлов создаваться не будет. Хотя с другой стороны, Линукс такая операционка где файлами является все, от устройств, до памяти и процессора... поэтому где же ему еще хранить данные архива как не в файле?? Другое дело что на это время будет создан временный файл, скорее всего где-то в /tmp, который будет удален, после завершения операции отдачи, атоматически.

bdimych
22.02.2006, 19:14
Если cgi имеется в виду perl и файлы по размеру "в разумных пределах" то есть модуль Archive::Zip


use Archive::Zip;
my $zip = Archive::Zip->new();
foreach my $file (@files) {
$zip->addFile($file);
};
$zip->writeToFileHandle(STDOUT);