Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 为什么这个Perl CGI脚本无法正确上传图像?_Html_Perl_Image_Upload_Cgi - Fatal编程技术网

Html 为什么这个Perl CGI脚本无法正确上传图像?

Html 为什么这个Perl CGI脚本无法正确上传图像?,html,perl,image,upload,cgi,Html,Perl,Image,Upload,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

我有以下代码:

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;
使用CGI;
使用File::Basename;
使用Image::Magick;
使用时间::雇佣qw(gettimeofday);
my$query=新CGI;
my$upload_dir=“../images”#在我们的服务器上的位置
我的$filename=$query->param(“img”);
my$timestamp=int(gettimeofday*1000);
我的($name,$path,$extension)=文件解析($filename,\..*');
$filename=$name.“\.”$timestamp$扩展;
#上传图片
my$upload_filehandle=$query->param(“img”);
打开(上传文件“>$upload_dir/$filename”)或死亡“$!”;
二进制上传文件;
而()
{  
打印上传文件;
}  
关闭上传文件;
然后我为图像调整大小。我的问题是图像没有上传。我有一个名为$filename的空文件。我省略了与调整大小相关的部分,我仍然有代码。所以我确信文件没有正确上传。我是不是错过了图书馆? 有什么帮助吗?请..

您需要更改

my$upload\u filehandle=$query->param(“img”)

my$upload\u filehandle=$query->upload(“img”)

根据

希望有帮助。

你需要改变

my$upload\u filehandle=$query->param(“img”)

my$upload\u filehandle=$query->upload(“img”)

根据


希望有帮助。

我找到了原因:正如在中指出的,表单的编码类型必须是
多部分/表单数据
。当我添加这一点时,一切都正常了。

我找到了原因:正如在中指出的,表单的编码类型必须是
多部分/表单数据
。当我添加它时,一切正常。

添加了这个“ENCTYPE='multipart/formdata'”而不是编码

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

添加了“ENCTYPE='multipart/formdata'”而不是编码

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

它起作用了

但没有起作用。当我打印“|$upload|u filehandle |”时,我得到了它。这意味着上传的文件是空的。知道为什么吗?没用。当我打印“|$upload|u filehandle |”时,我得到了它。这意味着上传的文件是空的。知道为什么吗?一些建议:(1)避免使用间接宾语表示法。即:使用
CGI->new
。(2) 除非您已明确更改为已知目录,否则不要对上载位置使用相对路径。(3) 有些人使用find
$filename=“${name}\u$timestamp$extension”
甚至
$filename=sprintf“%s”\ud%s',$name,$timestamp,$extension更具可读性。一些建议:(1)避免使用间接对象表示法。即:使用
CGI->new
。(2) 除非您已明确更改为已知目录,否则不要对上载位置使用相对路径。(3) 有些人使用find
$filename=“${name}\u$timestamp$extension”
甚至
$filename=sprintf“%s”\ud%s',$name,$timestamp,$extension更具可读性。