如何根据Content-Length或MIME-Type中止Catalyst上载?

时间:2009-07-23 02:25:48

标签: perl upload catalyst

我尝试使用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...
}

这是接近上传验证的正确方法吗?

2 个答案:

答案 0 :(得分:2)

Catalyst在发送到您的操作之前处理上传。我怀疑,你需要在请求处理过程的早期拦截,这意味着一个插件。

我不是使用Catalyst上传的专家,但可能有一些已经做过的事情,所以值得在cpan上搜索...但如果没有,我会看看Upload Progress是怎么回事插件执行它为当前上载获取状态所做的工作。您应该能够以类似的方式终止上传。

JayK

答案 1 :(得分:1)

另请参阅HTML :: FormHandler :: Model :: DBIC,它在内置验证中为您处理这两种情况。