Perl CGI输入类型FILE

时间:2016-09-21 23:02:15

标签: perl cgi

我试图做一个简单的Perl CGI脚本..用户可以在网页上上传一个excel文件..它将存储在一个文件夹中,稍后我会做一些操作。

我可以使用" textarea"创建一个带有文本框的网页syntax..Below是我的工作代码。

sub output_form {
my ($q) = @_;
print $q->start_form( -name   => 'main', -action => 'cgi.cgi', -method => 'POST', -enctype => 'multipart/form-data');
print $q->start_table;
print $q->Tr(
    $q->td(' Upload the spreadsheet here  :'),
       $q->textarea(-name => "text", -size => 200, -cols => 30, -rows => 5 )
    )
);

print $q->Tr( $q->td( $q->submit( -value => 'Submit' ) ),
$q->td(' ') );
print $q->end_table;
print $q->end_form;

}

但是,我的问题是我想要输入类型的文件..所以我可以要求用户浏览并附加电子表格...我将无法提供任何帮助。

互联网上有一些例子......它们是HTML ..但我想要一种CGI方式

2 个答案:

答案 0 :(得分:0)

  

互联网上有一些例子......它们是HTML ..但我想要一种CGI方式

听起来你有点困惑。这里有两个步骤。首先,您需要创建正确的HTML输入,然后,您需要处理该输入以上载文件。这两个阶段在两个完全独立的时间发生,以响应两个单独的HTTP请求。它看起来像这样:

  • 第1步
    • HTTP请求 - 用户访问您的网页。
    • HTTP响应 - 您的网络应用返回包含文件输入的HTML。
  • 第2步
    • HTTP请求 - 用户填写并提交表单。
    • HTTP响应 - 您的Web应用程序处理请求,对文件执行任何操作,然后将HTML返回给用户,说“谢谢。您的文件已收到”。

所以,步骤1.如何创建文件输入操作符。我怀疑通过“我想要一种CGI方式”,你的意思是“我如何使用HTML生成函数来做到这一点?”首先从官方CGI.pm文档中阅读 - HTML Generation functions should no longer be used。我们已经知道,曾经是CGI.pm的一部分的HTML生成函数至少在十五年内是一个糟糕的想法。现在没有人应该使用它们。这就是两年前删除这些功能的文档的原因。请改用templating system

但最终,这并不重要。如果你坚持,你仍然可以使用HTML生成函数(the documentation is here),或者你可以理智并使用包含文件输入的模板。您的表单甚至可以在静态HTML文件中。无论您选择哪种方法,最终都会将HTML返回到包含以下内容的浏览器:

<input type="file" name="file_upload"  />

(看,它并不是很难。HTML生成功能真的让生活变得更加艰难!)

然后,一旦使用填写表单并点击“提交”,您需要处理该输入。 The documentation for doing that is here.但是,总而言之,您可以使用以下命令获取文件的名称:

my $filename = $q->param('file_upload');

或者,可能更有用,您可以从以下文件中获取文件内容的打开文件句柄:

my $io_handle = $q->upload('file_upload');

这意味着您可以使用以下代码将文件写入服务器上的某个位置:

if ( my $io_handle = $q->upload('file_upload') ) {
  open ( my $out_file, '>>', $some_file_path ) or die $!;
  while ( my $bytesread = $io_handle->read($buffer,1024) ) {
    print $out_file $buffer;
  }
}

您还可以使用以下命令获取上传文件的MIME类型:

my $type = $q->uploadInfo( $io_handle )->{'Content-Type'};

但我建议您阅读所有文档以获取所有详细信息。

P.S。哦,还有CGI? 2016年?!请查看something a little more up to date

答案 1 :(得分:0)

我的问题是我希望输入文件类型..以便我可以要求用户浏览并附加电子表格。==>(仅查看)您可以使用文件字段。

例如

$q->filefield(
    -name      => 'filename',
    -size      => 40,
    -maxlength => 80,
    -accept => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel');

当用户单击文件字段时,它将仅显示目录中存在的Excel文件