我有一个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"};
};
答案 0 :(得分:1)
很难理解你的问题。但是,请阅读Processing a File Upload Field中的CGI docs。我想你可能在寻找:
直接访问临时文件
处理上传的文件时,
CGI.pm
会在您的硬盘上创建一个临时文件,并将文件句柄传递给该文件。完成文件句柄后,CGI.pm
取消链接(删除)临时文件。如果需要,可以直接访问临时文件。您可以通过将文件名传递给tmpFileName()
方法来访问文件上载的临时文件:
另一方面,如果您想在 网站访问者的计算机 上找到该文件的完整路径,我希望在那里显而易见如果用户的浏览器未将该信息作为文件名提交,则脚本无法检索此信息:
如果您想要输入文件的文件名,可以拨打
param()
:$filename = $q->param('field_name');
不同的浏览器会为名称返回略有不同的内容。有些浏览器只返回文件名。其他人使用用户计算机的路径约定返回文件的完整路径。无论如何,返回的名称始终是用户计算机上文件的名称,与
CGI.pm
在上传假脱机期间创建的临时文件的名称无关
答案 1 :(得分:0)
PATH_INFO用于其他目的。你需要“tmpFileName”:
my $cgi = CGI->new;
my $filename = $cgi->param('uploadfile');
my $tmpfilename = $cgi->tmpFileName($filename);
您可以从File :: Basename中提取带有“fileparse”的路径。