使用perl从路径中提取文件名(IE8浏览器)

时间:2012-12-18 00:33:13

标签: perl internet-explorer-8

我正在使用perl将文件上传到服务器,然后解析它以获取信息。页面是cgi脚本,我使用的是perl模块

use File::Basename;

我的服务器端代码是:

my $path = $cgi->param('filename');
my $filename = basename($path);
if ($filename) {
  if ($filename =~ /.csv/i) {do nothing;}
  else {
    $error = 'please upload a csv file';
    push @error, $error;
  }
}

我已尝试过所有内容,代码在Chrome,Safari,Firefox上正常运行,但是当我在IE8上进行测试时。文件名将更改为完整路径名。所以例如C:/meetup/sf/perl.csv是完整的路径。在CSF中,文件名显示为perl.csv但在IE8中:它显示为C:/meetup/sf/perl.csv

有人可以帮我找出获取文件名的正确方法,以便在所有浏览器中正确显示。

谢谢,
Parik

2 个答案:

答案 0 :(得分:1)

另一种方法是使用Path::Class,它明确用于跨平台路径处理。

use Path::Class 'file';
my $filename = file($path)->basename;

答案 1 :(得分:0)

问题是unix / windows路径分隔符。而不是通常的/分离组件IE8传递可能传递它作为\。

您可以通过以下方式实现通用解决方案:

    my $path = $cgi->param('filename');
    # replace all occurences of \ with / chrome/firefox etc won't be affected 
    #because they wont have any \ delimiters
    $path =~ s/\\/\//g;  

    my ($name,$parsed_path,$suffix) = fileparse($path,@suffixlist);
    print "name $name \n"; # this should carry the name of the file eg perl.csv