2016-09-21 111 views
1

我想要做一個簡單的Perl CGI腳本..其中用戶可以上傳一個網頁上的Excel文件..將存儲在一個文件夾中,稍後我會做一些操作。Perl的CGI輸入類型文件

我可以使用「textarea」語法創建帶有文本框的網頁。下面是我的工作代碼。

sub output_form { 
my ($q) = @_; 
print $q->start_form(-name => 'main', -action => 'cgi.cgi', -method => 'POST', -enctype => 'multipart/form-data'); 
print $q->start_table; 
print $q->Tr(
    $q->td(' Upload the spreadsheet here :'), 
     $q->textarea(-name => "text", -size => 200, -cols => 30, -rows => 5) 
    ) 
); 

print $q->Tr($q->td($q->submit(-value => 'Submit')), 
$q->td(' ')); 
print $q->end_table; 
print $q->end_form; 

}

不過,我的問題是我想要的文件的輸入類型..所以,我可以要求用戶瀏覽和附加spreadsheet..which我不能做任何幫助將不勝感激。

上有internet..which的HTML ..但我希望有一個CGI方式

回答

0

上有internet..which的HTML ..但我想一個CGI方式幾個例子幾個例子

這聽起來像你有點困惑。這裏有兩個步驟。首先,您需要創建正確的HTML輸入,然後,您需要處理該輸入以上載文件。響應於兩個單獨的HTTP請求,這兩個階段發生在兩個完全分開的時間。它看起來像這樣:

  • 步驟1
    • HTTP請求 - 用戶訪問你的網頁。
    • HTTP響應 - 您的Web應用程序返回包含文件輸入的HTML。
  • 步驟2
    • HTTP請求 - 用戶填寫並提交表單。
    • HTTP響應 - 您的Web應用程序處理請求,執行需要的所有操作,然後向用戶返回HTML,例如「Thank you。Your file has been received」。

所以,第1步如何創建文件輸入操作。我懷疑「我想要一種CGI方式」,你的意思是「我如何使用HTML生成函數來做到這一點?」首先閱讀官方CGI.pm文檔 - HTML Generation functions should no longer be used。我們已經知道,曾經是CGI.pm一部分的HTML生成函數至少在十五年內是一個糟糕的主意。現在沒有人應該使用它們。這就是爲什麼這些功能的文檔在兩年前被刪除的原因。請改用templating system

但最終,這並不重要。如果您堅持,您仍然可以使用HTML生成功能(the documentation is here),或者您可以理智並使用包含文件輸入的模板。您的表單甚至可以處於靜態HTML文件中。無論您選擇何種方式,你最終會返回HTML到包含像這樣的瀏覽器:

<input type="file" name="file_upload" /> 

(見,這不是真的很難的HTML生成功能真的讓生活更難比它需要!)

然後,一旦使用已填寫表單並點擊「提交」,您需要處理該輸入。The documentation for doing that is here.但是,要總結,你可以用得到的文件的名稱:

my $filename = $q->param('file_upload'); 

或者,可能更有用,你可以在文件的內容從得到一個開放的文件句柄:

my $io_handle = $q->upload('file_upload'); 

這意味着你可以使用如下代碼編寫服務器上的文件到某處:

if (my $io_handle = $q->upload('file_upload')) { 
    open (my $out_file, '>>', $some_file_path) or die $!; 
    while (my $bytesread = $io_handle->read($buffer,1024)) { 
    print $out_file $buffer; 
    } 
} 

您還可以得到MIME類型上傳文件:

my $type = $q->uploadInfo($io_handle)->{'Content-Type'}; 

但我建議您閱讀所有文檔以獲取所有詳細信息。

p.s.哦,還有CGI? 2016年?!請看something a little more up to date