我尝试使用parse_on_demand,如下所示: http://search.cpan.org/~flora/Catalyst-Runtime-5.80007/lib/Catalyst.pm#ON-DEMAND_PARSER
但是,我似乎无法停止上传。我只是通过创建一个立即死亡的动作来测试它,但是浏览器似乎上传了我选择的非常大的文件,然后才能达到我的行动:
sub upload :Local {
my ($self, $c) = @_;
die;
# What I'd like to do is this:
# if ($c->req->header('Content-Length') > $some_limit) {
# die "Upload too large";
# }
# ... check filename extension and mime-type...
}
这是接近上传验证的正确方法吗?
答案 0 :(得分:2)
Catalyst在发送到您的操作之前处理上传。我怀疑,你需要在请求处理过程的早期拦截,这意味着一个插件。
我不是使用Catalyst上传的专家,但可能有一些已经做过的事情,所以值得在cpan上搜索...但如果没有,我会看看Upload Progress是怎么回事插件执行它为当前上载获取状态所做的工作。您应该能够以类似的方式终止上传。
JayK
答案 1 :(得分:1)
另请参阅HTML :: FormHandler :: Model :: DBIC,它在内置验证中为您处理这两种情况。