【问题标题】:How to upload multiple files in perl?perl如何上传多个文件?
【发布时间】:2014-04-09 05:07:33
【问题描述】:

我需要使用 perl cgi 上传多个文件。 我使用表单类型作为

enctype="multipart/form-data 并且还设置 输入类型文件中的 multiple='multiple'。

只需要知道我们应该在服务器端写什么?

谁能告诉我如何使用 perl 上传多个文件?

【问题讨论】:

  • 您是在问如何在 HTTP 请求中包含文件,或者如何在 CGI 脚本中接收它们?
  • 未经编辑的帖子说'需要知道我们应该在服务器端写什么'

标签: perl cgi fastcgi perl-module mod-perl


【解决方案1】:

以下代码就足够了,并将参数中存在的文件上传到 /storage 位置:

use CGI;
my $cgi = new CGI;
my @files = $cgi->param('multi_files[]');
my @io_handles=$cgi->upload('multi_files[]');
foreach my $upload(@files){
    print "Filename: $upload<br>";
    my $file_temp_path = "/storage";
    my $upload_file  = shift @io_handles; 
    open (UPLOADFILE,">$file_temp_path/$upload") or print "File Open Error";
    binmode UPLOADFILE;
    while (<$upload_file>) {
        print UPLOADFILE;
    }
}
print "Files Upload done";

【讨论】:

    【解决方案2】:

    在服务器端,您首先检索文件文件句柄,如下所示:

     use CGI;
     my $q = CGI->new();
     my $myfh = $q->upload('field_name');
    

    现在您有了一个用于上传文件的临时存储的文件句柄。

    可以使用 param() 方法获取上传的文件名。

     $filename = $q->param('field_name');
    

    临时文件可以通过以下方式直接访问:

     $filename = $query->param('uploaded_file');
     $tmpfilename = $query->tmpFileName($filename);
    

    我强烈建议您仔细阅读 CGI.pm 文档几次。虽然不是微不足道的,但这一切都相当简单。

    【讨论】:

      【解决方案3】:

      这样的东西应该可以处理多个文件上传:

      my @fhs = $Cgi->upload('files');
      
      foreach my $fh (@fhs) {
          if (defined $fh) {      
              my $type = $Cgi->uploadInfo($fh)->{'Content-Type'};
              next unless ($type eq "image/jpeg");
      
              my $io_handle = $fh->handle;
              open (OUTFILE,'>>','/var/directory/'.$fh);
              while (my $bytesread = $io_handle->read(my $buffer, 1024)) {
                  print OUTFILE $buffer;
              }
              close (OUTFILE);
          }
      }
      

      Ofc 'files' 是文件上传表单的名称。

      【讨论】:

        猜你喜欢
        • 2022-10-14
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 2014-10-30
        • 2016-08-10
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        相关资源
        最近更新 更多