Вариантов два: либо играйся с enctype формы, либо уже на серваке предварительно всё восстанавливай. Хотя это и не всегда возможно. Так что лучше первое.
Меня интересует, как на perl сделать загрузку файлов на сервер (например, мой сайт) через веб-интерфейс.
Объясняю, что я имею ввиду. Я делаю админку для своего сайта и мне хочется добавить к этой админке вот такую загрузку файлов: вводишь путь к файлу на локальном компе, жмешь кнопку "залить" и файл заливается %) Или кнопку "обзор" можно сделать...
Мне это надо, чтобы каждый раз не заливать нужные файлы на сайт через FTP.
[php] А то же самое в php?11.08.04 08:33 Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Да я знаю, как это выглядит в html, меня больше perl-овая сторона волнует.
Как организовать закачку файлов на сайт через веб? Это надо, чтобы этот скрипт подключался к этому серваку по фтп и заливал указанный файл, или как-то по-другому?
Не понял.. Ты имеешь ввиду межсайтовый скриптинг или просто...09.08.04 12:13 Автор: Heller <Heller> Статус: Elderman
> Да я знаю, как это выглядит в html, меня больше perl-овая > сторона волнует. > Как организовать закачку файлов на сайт через веб? Это > надо, чтобы этот скрипт подключался к этому серваку по фтп > и заливал указанный файл, или как-то по-другому?
Не понял.. Ты имеешь ввиду межсайтовый скриптинг или просто закачку через форму на сайт? Если обычную закачку, то решение достаточно простое:
$temp=<>;
myformat($temp);
open (FH,"xxx");
print FH xxx;
close FH;
myformat приводит результат <> к нормальному виду (в STDIN данные лежат в urlencoded) - её надо писать самому. Вроде, тут всё просто.
Вечером (по Москве), если руки дойдут, напишу простой работающий код и выложу здесь ответом.
Просто закачку файлов с моего компа на сайт через веб-форму.09.08.04 15:06 Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Во-первых извинюсь - попутал немного с потоком ввода. Файл поступает не через STDIN, а через дескриптор, именованый как имя файла. Например, если Ты отправляешь файл xxx.txt, то читать его надо как <xxx.txt>. Имя файла передаётся как параметр. Пример из ФАК'а:
$filename = $query->param('uploaded_file');
while (<$filename>) {
print;
}
В том же факе рекомендуется заместо param использовать upload - она возвращает не имя закачиваемого файла, а имя дескриптора, что более корректно.
Вот и всё, в общем-то.
а если мне хочется не содержание загруженного текстовика на...10.09.04 10:22 Автор: n0xi0uzz <Черкасов Виктор> Статус: Member Отредактировано 10.09.04 10:50 Количество правок: 1
> Во-первых извинюсь - попутал немного с потоком ввода. Файл > поступает не через STDIN, а через дескриптор, именованый > как имя файла. Например, если Ты отправляешь файл xxx.txt, > то читать его надо как <xxx.txt>. Имя файла > передаётся как параметр. Пример из ФАК'а: > > $filename = $query->param('uploaded_file'); > while (<$filename>) { > print; > }
а если мне хочется не содержание загруженного текстовика на экран вывести, а файл, допустим .zip в какой-нить папке сервера сохранить, тогда как делать?
когда я делаю так:
use CGI;
$cgi = new CGI;
$paste = $cgi->param("paste");
print "<form method=\"post\" enctype=\"multipart/form-data\" action=\"filez.un\">";
print "<input type=\"file\" name=\"paste\">";
print "<input type=\"submit\" value=?????????>";
print "</form>";
open FI, ">$paste";
while(<$paste>){
print FI;
};
close FI;
---
но этоот код передает без повреждений только текстовики, графические файлы он изменяет до неузнаваимости, архивы - калечит.
что посоветуете?
Все! ;) Вопрос решен, всем спасибо за помощь.14.09.04 09:44 Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Вариантов два: либо играйся с enctype формы, либо уже на серваке предварительно всё восстанавливай. Хотя это и не всегда возможно. Так что лучше первое.
расскажи, пожплуйста, поподробнее, а то я слабо представляю...11.09.04 01:48 Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Значит, у каждой формы есть такой необязательный атрибут, как enctype. По умолчанию он обычно имеет значение "application/x-www-urlencoded" (ещё часто пишут ".../x-www-form-urlencoded") или "text/plain". Чаще первое. Он как раз и указывает, как именно кодировать передаваемые формой данные. Указывается в формате MIME (RFC 1521).
Вот, в общем-то, и всё. То есть если Ты передаёшь jpeg-картинку, то enctype желательно указать "image/jpeg" (за достоверность не ручаюсь - точно не помню, но вроде так).
Для передачи совершенно любых файлов применяется "application/octet-stream" - правда, там достаточно мудрёное кодирование, но разобраться можно. Да и потом есть библиотеки для работы с ним. Вот, в принципе, и всё.
Encode - это атрибут формы. Ты не можешь заранее знать, файл с каким расширением отправят - за кодирование отвечает браузер. Поэтому используй "application/octet-stream" - он универсален. Или, если форма имеет несколько полей, "multipart/form-data".