如何在Perl CGI脚本中可靠地确定上传的文件名?

时间:2009-06-26 06:29:00

标签: perl file-upload cgi

从上传表单传递到Perl CGI(使用CGI.pm)脚本的文件名取决于客户端计算机,并且可能包含依赖于客户端的路径分隔符。是否有一种可靠的方法来解析传递的参数以确定文件名(通常是最后一个路径分隔符后面的最后一个子字符串)。

1 个答案:

答案 0 :(得分:4)

当客户端使用MSIE(暗示Windows路径)时,我只遇到过路径分隔符的问题。我使用了一个相当简单的正则表达式来处理它。但是,您可以扩展正则表达式(甚至拆分)来处理最常见的路径分隔符 - '/','\'和偶尔的':'。

或者,您应该能够从useragent字符串中计算出文件系统类型(可能使用HTTP::DetectUserAgentHTTP::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);