簡體   English   中英

使用perl獲取上傳文件的目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM