2010-02-16 46 views
1

我有這樣的代碼:爲什麼這個Perl CGI腳本無法正確上傳圖片?

use CGI;  
use File::Basename;  
use Image::Magick;  
use Time::HiRes qw(gettimeofday);  
my $query = new CGI;  
my $upload_dir = "../images"; #location on our server  
my $filename=$query->param("img");  
my $timestamp = int (gettimeofday * 1000);  
my ($name, $path, $extension) = fileparse ($filename, '\..*');  
$filename = $name ."_".$timestamp. $extension;  

#upload the image 

my $upload_filehandle =$query->param("img");  
open (UPLOADFILE, ">$upload_dir/$filename") or die "$!"; 
binmode UPLOADFILE; 
while (<$upload_filehandle>) 
    { 
    print UPLOADFILE; 
    } 

    close UPLOADFILE; 

那我調整了圖像。我的問題是圖像沒有上傳。我有一個名爲$ filename的空文件。我省略了與調整大小有關的部分,我仍然有代碼。所以我確定該文件沒有被正確上傳。我錯過任何圖書館嗎? 任何幫助嗎?PLZ ..

+0

一些建議:(1)避免間接對象符號。 I.e .:使用'CGI-> new'。 (2)除非已明確更改爲已知目錄,否則不要使用相對路徑進行上載位置。 (3)一些使用find $ $ filename =「$ {name} _ $ timestamp $ extension」;''甚至'$ filename = sprintf'%s_%d's',$ name,$ timestamp,$ extension;''更具可讀性。 –

回答

2

我想出了爲什麼:正如CGI.pm docs中指出的,表單的編碼類型必須是multipart/form-data。當我補充說,一切工作。

3

您需要根據this tutorial改變

my $upload_filehandle =$query->param("img");

my $upload_filehandle =$query->upload("img");

希望它有幫助。

+0

它沒有工作。當我打印「| $ upload_filehandle |」我明白了||。 這意味着上傳的文件是空的。任何想法爲什麼? – Luci

0

增加了這個「ENCTYPE ='multipart/form-data'」而不是編碼。

> <form action="/post.pl" method="post" ENCTYPE='multipart/form-data'> 

和它的工作

相關問題