LINUX.ORG.RU

загрузка файлов...


0

0

Я думаю многие cgi-программисты сталкивались с задачей загрузки файлов пользователей на сервер через веб-форму.
У меня такая возникла проблема... В загруженном бинарном файле все байты имеющие hex-код 00, заменяются на код 20 - т.е. символ пробела. И я совершенно без понятия в чём трабла... Такое явление возникает если передавать файл с виндового клиента (любой браузер). Из под Линуха переданный файл таких проблем не имеет, но в нём происходит какая-то другая фигня - такое ощущение что происходит перевод файла из одной кодировки в другую, как текстового файла, т.е. все байты имеющие код больше 128 меняют своё значение на другое. Подозреваю, что идёт перекодировка из koi8-r в win-1251.
Отсюда я сделал вывод, что по какому-то странному обстоятельству толи на стороне клиента, толи сам Апаче воспринимает эти файлы как текстовые и передаёт их в соотвествующем виде, проводя преобразования.
Как лечить, помогите.
Сервер: Mandrake 8.0, Russian Apache, кодировка всех html-документов на диске win-1251, отправляется в той же кодировке.
Веб-форма такая:
<form METHOD="POST" ENCTYPE="multipart/form-data">
<input TYPE="file" NAME="uf">
<input type="submit" name="go">
</form>
Скриптик простейший:
#!/usr/bin/perl
use CGI qw(:all);
if (param){
$filename=param('uf');
while (<$filename>) {$file.=$_;}
open(FILE,">/home/tmp/uploadfile") || die "can't open";
print FILE $file;
close(FILE);
}
Пробовал и без использования модуля CGI, сохранял целиком запрос от клиента, но уже сам запрос искажён этим преобразанием...

anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.