Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > загрузка файла на сервер (upload) filefield


Автор: DigitSphinx 1.7.2010, 17:41
OS:windows VISTA 
Server: IIS7
собственно проблема : следующий код корректно загружает файлы на сервер (долго мучался с binmode но вроде уже работает!)

Код

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use CGI;
$q = new CGI();
print $q->start_html;
$FullPath = $q->param('FileName');

if ($FullPath)
{
        @buf = split(/\\/,$FullPath);
        $FileName = $buf[$#buf];
        print "Full Path is : $FullPath<br>File Name is : $FileName<br>";

        $numbytes = 1024;

        open(INPUTFILE, "<$FullPath") or die "ERROR OPENING INPUTFILE($FullPath) $!";
        open(OUTPUT, ">Uploaded\\$FileName") or die "ERROR OPENING OUTPUT FILE $!";
        if (-B $FullPath)
        {
                binmode OUTPUT, ':raw';
                binmode INPUTFILE, ':raw';
                print "THIS IS BINARY FILE<br>";
        }
        elsif(-T $FullPath)
        {
          binmode OUTPUT, ':crlf';
                 binmode INPUTFILE, ':crlf';
                 print "THIS IS TEXT FILE<br>";
        }
        else
        {
                die "<br>ERROR NOT BINARY NOR TEXT FILE Oo<br>";
        }

        while ($bytesread = read(INPUTFILE, $buffer, $numbytes))
        {
                print OUTPUT $buffer or die "ERROR WRITING $!";
        }
        print "<br>File uploaded" ;
        close (OUTPUT);
        close (INPUTFILE);
}
else
{
        print $q->start_multipart_form(-method=>'post',-action=>'index.cgi');
        print $q->filefield(-name=>'FileName');
        print "<br>";
        print $q->submit("Send File");
}
print $q->end_html;



но если предварительно не открыть доступ к файлу который я выбираю в браузере (доступ для everyone с полными правами) то файл не загружается на сервер со следующей ошибкой

Код

Full Path is : C:\Users\QAQC2\Desktop\NDT Request 01-07-10.xlsx
File Name is : NDT Request 01-07-10.xlsx
Status: 500 Content-type: text/html 
Software error:
Permission denied ERROR OPENING INPUTFILE(C:\Users\QAQC2\Desktop\NDT Request 01-07-10.xlsx)! at C:\inetpub\wwwroot\index.cgi line 16.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. 


на многих сайтах есть uploader'ы но мня никогда раньше не просили открыть доступ к файлу )))) так что думаю что-то с кодом не так !

по поводу браузера, этот код не работает на opera mozilla и т.д. а работает только на эксплорере и то версии до Висты максимум !
на других браузерах не отображается полный путь к файлу а только имя файла !

Автор: Jimy 4.7.2010, 09:39
строка 16 вообще не нужна
а в строке 35
вместо
Код

 while ($bytesread = read(INPUTFILE, $buffer, $numbytes))

пишите  
Код

while ($bytesread = read($FullPath, $buffer, $numbytes))


для использования binmode для загружаемого файла указывайте
Код

binmode(STDIN)


Автор: DigitSphinx 5.7.2010, 01:27
 smile  Спасибо !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)