[英]Getting the directory of an uploaded file with perl
我有一個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"};
};
很難理解您的問題。 但是,請閱讀CGI docs中的 處理文件上載字段 。 我認為您可能正在尋找:
直接訪問臨時文件
處理上傳的文件時,
CGI.pm
在您的硬盤上創建一個臨時文件,並將文件句柄傳遞給該文件。 完成文件句柄后,CGI.pm
鏈接(刪除)臨時文件。 如果需要,可以直接訪問臨時文件。 您可以通過將文件名傳遞給tmpFileName()
方法來訪問用於上傳文件的臨時文件:
另一方面,如果您試圖在網站訪問者的計算機上查找文件的完整路徑,那么我希望很明顯,如果腳本不是由腳本提交的,則腳本無法檢索該信息。用戶的瀏覽器作為文件名:
如果要輸入文件的文件名,則可以調用
param()
:$filename = $q->param('field_name');
不同的瀏覽器會為名稱返回略有不同的東西。 某些瀏覽器僅返回文件名。 其他人則使用用戶計算機的路徑約定將完整路徑返回到文件。 無論如何,返回的名稱始終是用戶計算機上文件的名稱,並且與
CGI.pm
在上載假脫機期間創建的臨時文件的名稱無關。
PATH_INFO用於其他目的。 您需要“ tmpFileName”:
my $cgi = CGI->new;
my $filename = $cgi->param('uploadfile');
my $tmpfilename = $cgi->tmpFileName($filename);
您可以從File :: Basename中使用“ fileparse”提取路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.