我试图做一个简单的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方式
答案 0 :(得分:0)
互联网上有一些例子......它们是HTML ..但我想要一种CGI方式
听起来你有点困惑。这里有两个步骤。首先,您需要创建正确的HTML输入,然后,您需要处理该输入以上载文件。这两个阶段在两个完全独立的时间发生,以响应两个单独的HTTP请求。它看起来像这样:
所以,步骤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文件