我正在使用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
答案 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