簡體   English   中英

在未打開的文件句柄上使用perl“read()進行文件上載時出錯”

[英]Error in file upload using perl “read() on unopened filehandle”

當我使用perl上傳文件時,我正面臨讀取文件錯誤

           fileparse_set_fstype('MSWin32');
            my ($OriginalName,$OriginalPath) = fileparse( $CgiRef->{'filename'} );
            my $LocalName = $_ . $OriginalName;

            open(FILE, ">$config->{'BASE_PATH'}/files/$LocalName")
               or die "Could not open file:$!";
            my $Req = new CGI;
            while (read($Req->param('filename'), my $Buffer, 1024))
            {
               print FILE $Buffer;
            }
        close(FILE)

訪問$CgiRef->{'$filename'}或任何引用變量都沒有問題。 請告訴我上傳時的實際問題在哪里。 現在它在未打開的文件句柄上顯示錯誤read()

你試圖從錯誤的地方讀書。 在CGI-land中,使用$cgi->upload('varname')來獲取您嘗試接收的對象的文件句柄。

您的代碼段的修改版本應該有效:

 fileparse_set_fstype('MSWin32');

 my ($OriginalName,$OriginalPath) = fileparse( $CgiRef->{'filename'} );
 my $LocalName = $_ . $OriginalName;

 open(FILE, ">", "$config->{'BASE_PATH'}/files/$LocalName")
     or die "Could not open file:$!";

 my $Req = CGI->new();

 # Get the filehandle for the upload content
 my $Req_file = $Req->upload('filename');

 # Save to FILE
 while (<$Req_file>) {
     print FILE;
 }
 close(FILE);

請注意,請始終使用3 param版本的open 它更干凈,更安全,更清晰。 有關解釋,請參閱Modern Perl

可以在此處找到從HTML表單到CGI處理的整個過程的完整示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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