【问题标题】:upload file through Perl CGI script without storing file通过 Perl CGI 脚本上传文件而不存储文件
【发布时间】:2013-09-04 04:52:01
【问题描述】:

我在 Perl 中创建了一个将文件上传到服务器的 CGI 脚本。该脚本完美运行:

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

if (!$upload_filehandle)
{
    die "Configuration file could not be loaded";
}

open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
    print UPLOADFILE;
}

close UPLOADFILE;

问题是我不想将文件存储到服务器上,而只想将其部分内容存储在 Perl 脚本中的一些变量中。我不知道该怎么做。我尝试了以下代码:

my @array;
my $upload_filehandle = $query->upload("config");

if (!$upload_filehandle)
{
    die "Configuration file could not be loaded";
}

open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
    push @array, $_;
}


close UPLOADFILE;

我想将文件内容存储在一个数组中,但它给出了一个错误:

[Sat Aug 31 18:03:27 2013] [error] [client 127.0.0.1] malformed header from script. Bad      header=\xff\xd8\xff\xe11\xdcExif: loadConfig.cgi, referer: http://localhost/cgi-bin/uploadFile.cgi

我认为是在线 push @array, $_; 也可能是文件头无法识别造成的。

您对如何在不保存文件的情况下存储文件内容有什么想法吗?

提前感谢您的回复。

【问题讨论】:

    标签: perl file upload cgi


    【解决方案1】:

    您似乎正在尝试在正确的 HTTP 标头之前打印文件 (\xff\xd8\xff\xe11\xdcExif):

    print $query->header;
    

    我已经稍微整理了你的脚本,这很好用:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use CGI;
    use CGI::Carp 'fatalsToBrowser';
    
    my $query = CGI->new;
    
    my $upload_filehandle = $query->upload("config")
        or die "Configuration file could not be loaded";
    
    
    my @array = <$upload_filehandle>;
    
    print $query->header;
    
    use Data::Dumper;
    print Dumper(\@array);
    

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2014-02-24
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多