3

我想获得文件大小我正在这样做:

my $filename=$query->param("upload_file");
my $filesize = (-s $filename);
print "Size: $filesize ";`

然而它不起作用。请注意,我没有上传文件。我想在上传之前检查它的大小。因此,将其限制为最大 1 MB。

4

8 回答 8

5

在上传之前,您无法知道某物的大小。但是你可以查看Content-Length浏览器发送的请求头,如果有的话。然后,您可以决定是否要相信它。请注意,这Content-Length将是整个请求流的长度,包括其他表单字段,而不仅仅是文件上传本身。但这足以让您了解符合标准的客户。

由于您似乎在普通 CGI 下运行,您应该能够在$ENV{CONTENT_LENGTH}.

于 2010-04-26T13:43:07.873 回答
3

还想对可能已经设置了 post max 集(来自perldoc CGI )进行完整性检查:

$CGI::POST_MAX

如果设置为非负整数,此变量会设置 POSTing 大小的上限,以字节为单位。如果 CGI.pm 检测到大于上限的 POST,它将立即退出并显示错误消息。此值将影响普通 POST 和多部分 POST,这意味着它也限制了文件上传的最大大小。您应该将其设置为相当高的值,例如 1 兆字节。

于 2010-04-26T08:28:47.547 回答
2

提交表单时,上传的文件存储在服务器上的 tmp 位置,请检查那里的文件大小。

提供 $field 的值。

my $upload_filehandle = $query->upload($field);
my $tmpfilename = $query->tmpFileName($upload_filehandle);
my $file_size = (-s $tmpfilename);
于 2013-02-13T20:21:35.857 回答
1

这与 Perl 无关。

您正在尝试使用读取服务器上文件的命令来读取用户计算机上文件的文件大小,而使用 Perl 无法完成您想要的操作。

这是必须在浏览器中完成的事情,简单地看一下这些问题,要么非常困难,要么不可能。

您最好的选择是允许用户开始上传并在文件太大时中止。

于 2010-04-26T08:37:50.710 回答
1

如果您想在处理请求之前进行检查,最好检查触发请求的网页。我不认为网络浏览器可以自己完成,但如果你不介意 Flash,有许多 Flash 上传工具可以检查大小(以及文件类型)并阻止上传。

一个好的开始是YUI Uploader。这里还有更多:什么是最好的多文件 JavaScript / Flash 文件上传器?

显然,您也想在服务器端进行检查,但是当用户开始向服务器发送请求时,您已经用完了 CPU 周期和带宽。

于 2010-04-26T13:48:14.183 回答
1

谢谢各位的回应; 我刚刚发现为什么$filesize = (-s $filename);以前没有工作,这是因为我在发送 Ajax 请求时检查文件大小,而不是在重新提交页面时检查文件大小。这就是为什么我的大小为零。我修复了提交页面并且它有效。谢谢。

于 2010-04-30T07:58:28.677 回答
0

只需阅读这篇文章,但在检查内容长度是一个很好的近似预检查时,您还可以将文件保存到临时文件夹,然后对其执行任何类型的检查。如果它不符合您的标准,只需删除它并且不要将其发送到它的最终目的地。

于 2011-11-28T19:45:32.023 回答
-3

查看文件 stats -X - perldoc.perl.orgstat-perldoc.perl.org的 perl 文档。此外,您可以查看此上传脚本,该脚本正在执行您正在尝试执行的类似操作。

于 2010-04-26T08:19:48.620 回答