从上传表单传递到Perl CGI(使用CGI.pm)脚本的文件名取决于客户端计算机,并且可能包含依赖于客户端的路径分隔符。是否有一种可靠的方法来解析传递的参数以确定文件名(通常是最后一个路径分隔符后面的最后一个子字符串)。
答案 0 :(得分:4)
当客户端使用MSIE(暗示Windows路径)时,我只遇到过路径分隔符的问题。我使用了一个相当简单的正则表达式来处理它。但是,您可以扩展正则表达式(甚至拆分)来处理最常见的路径分隔符 - '/','\'和偶尔的':'。
或者,您应该能够从useragent字符串中计算出文件系统类型(可能使用HTTP::DetectUserAgent或HTTP::BrowserDetect)。鉴于您可以在解析文件之前调用File :: BaseName的fileparse_set_fstype函数。
类似的东西:
use File::Basename;
use HTTP::BrowserDetect;
# ... get the filename into $upload_file and agent into $user_agent_string.
my $browser = HTTP::BrowserDetect->new($user_agent_string);
my $ostype;
$ostype = 'MSWin32' if $browser->windows;
$ostype = 'Unix' if $browser->unix;
# There are more tests available.
fileparse_set_fstype($ostype);
my $filename = basename( $upload_file);