Perl 的 CGI.pm 可以处理 Firefox 的<输入类型=“文件”,多个=“”>吗?表单字段?
Firefox 3.6 引入了 [常规 type="file" 输入元素上的多个属性]( http://hacks.mozilla.org /2009/12/multiple-file-input-in-firefox-3-6/)。
我无法让 Perl 处理这些字段。我可以在列表上下文中调用该字段,如下所示:
my @files = $CGIobject->param("File_Input");
循环遍历将为我提供字符串形式的文件名,但没有其他内容。
任何建议都将受到极大的欢迎。
这是 HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Multiple file upload test</title>
</head>
<body>
<form action="deliberately_obfuscated"
method="post"
enctype="multipart/form-data">
<input type="file"
name="multiple_files"
multiple="true"/>
<button type="submit">Submit</button>
</form>
</body>
</html>
这是 Perl:
#!/usr/bin/perl
#use strict;
#use warnings;
use CGI;
my $CGIo = new CGI;
print $CGIo->header();
@lightweight_fh = $CGIo->upload('myfiles');
# undef may be returned
# if it's not a
# valid file handle
if (@lightweight_fh) {
# Upgrade the handle to
# one compatible with IO::Handle:
my $io_handle = $lightweight_fh->handle;
open (OUTFILE,'>>','/hidden_deliberately/');
while ($bytesread = $io_handle->read($buffer,1024)){
print OUTFILE $buffer;
}
}
脚本不进入
if (@lightweight_fh) {
块。
我在 if 块之前尝试过 @lightweight_fh 上的 Data:Dumper ,它实际上什么也打印不出来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
upload
方法.org/CGI" rel="nofollow noreferrer">CGI.pm。Use the
upload
method in CGI.pm.哇哦,成功了。手刹大问题?旧的 CGI.pm 版本!遗憾的是,CGI.pm 文档不包含诸如“在版本 X 中引入”等功能的注释。许多其他模块/库/包都可以。
碰巧我的版本是 3.15,当前版本是 3.49。我什至让它在严格模式下工作。有人知道为什么斯坦因使用非严格的例子吗?
这是 XHTML:
这是 Perl:
感谢大家的帮助。
Woohoo, got this working. The big handbrake issue? Old CGI.pm version! It's a shame the CGI.pm documentation does not include notes alongside features such as "Introduced in version X". Many other modules/libraries/packages do.
As it happens I had version 3.15 and the current is 3.49. I even got it working in strict mode. Anybody know why Stein uses non-strict examples?
Here's the XHTML:
Here's the Perl:
Thanks for your help everyone.
看起来您没有遵循 处理的文档带有 CGI.pm 的文件上传字段。在我们深入探讨这一点之前,您可以使用记录的方法通过一个文件来完成此操作吗?
It doesn't look like you're following the documentation for Processing a file upload field with CGI.pm. Before we get too far into this, can you do it with one file using the documented method?
是的,perl的CGI.pm可以处理firefox的多文件上传
想看看吗?使用此快捷方式:
您将看到类似以下内容:
首先,您将文件上传字段称为 File_Input,然后将其称为 multiple_files,然后将其称为 myfiles - 您必须使用相同的名称,这一点很重要。
另外, $lightweight_fh 和 @lightweight_fh 是两个不同的变量,您需要
另外,您尝试将 DIRECTORY '/hidden_deliberately/' 作为文件打开,并且不检查错误
Yes, perl's CGI.pm can proess firefox's multiple file uploads
Want to see? Use this shortcut:
You'll see something like:
First you call your file upload field File_Input, then you call it multiple_files, then you call it myfiles -- you have to use the same name, this important.
Also, $lightweight_fh and @lightweight_fh are two distinct variables, you'll need
Also, you try to open a DIRECTORY '/hidden_deliberately/' as a file, and you don't check for errors