Получение каталога загруженного файла с помощью Perl - PullRequest
2 голосов
/ 12 марта 2010

У меня есть скрипт Perl, который позволяет загружать файл на мой сервер. Я еще не закончил с этим, но я хотел бы знать, есть ли для меня какой-либо способ получить полный путь к загруженному файлу. Разве это невозможно сделать, проверив переменную окружения PATH_INFO, но когда я пытаюсь проверить информацию о пути, там ничего нет

#!/usr/bin/perl
use strict;
use CGI;
use File::Basename;


#Virtual Directory


eval
{

    my ($uploadfile, $cgi);
    $cgi = new CGI;
    $uploadfile = $cgi->upload('uploadfile');
    print $uploadfile;

use constant PASSWORD => 'p3rlD3v3l0p3r';
use constant UPLOAD_DIR => '/home/user/files';




print <<"HTML";
Status: 200 OK
Content-Type: text/html

<html>
    <head>
       <title>Virtual Directory</title> 
    </head>
    <body>
    $uploadfile
       <h2>Upload a new file</h2>
       <form method = "POST" enctype = "multipart/form-data"  action =""/>


          File:<input type = "file" name="uploadfile"/>



             <p>Password:
              <input type = "password" name ="passwd"/></p>
             <p><input type = "submit" value= "Submit File" /></p>


       </form>

    </body>


</html>

HTML


print $ENV{"PATH_INFO"};
};

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Трудно разобраться в вашем вопросе. Однако прочитайте Обработка поля загрузки файла в CGI docs . Я думаю, что вы можете искать:

Прямой доступ к временным файлам

При обработке загруженного файла CGI.pm создает временный файл на вашем жестком диске и передает вам дескриптор файла для этого файла. После того, как вы закончите с дескриптором файла, CGI.pm снимает связь (удаляет) временный файл. Если вам нужно, вы можете получить доступ к временному файлу напрямую. Вы можете получить доступ к временному файлу для загрузки файла, передав имя файла методу tmpFileName():

С другой стороны, если вы пытаетесь выяснить полный путь к файлу на компьютере посетителя веб-сайта , я надеюсь, должно быть очевидно, что способ для скрипта получить эту информацию, если она не передана браузером пользователя в качестве имени файла:

Если вы хотите ввести имя файла для файла, вы можете просто позвонить param():

$filename = $q->param('field_name');

Различные браузеры будут возвращать немного разные вещи для имени. Некоторые браузеры возвращают только имя файла. Другие возвращают полный путь к файлу, используя соглашения о путях компьютера пользователя. В любом случае, возвращаемое имя всегда является именем файла на компьютере пользователя и не связано с именем временного файла, который CGI.pm создает во время загрузки спула

0 голосов
/ 12 марта 2010

PATH_INFO для других целей. Вам нужно "tmpFileName":

my $cgi = CGI->new;
my $filename = $cgi->param('uploadfile');
my $tmpfilename = $cgi->tmpFileName($filename);

Вы можете извлечь путь с помощью "fileparse" из File :: Basename.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...