Perl - 使用CGI中止上传

时间:2011-07-28 16:33:36

标签: perl file-upload cgi

我正在用Perl,PHP和JavaScript(jQuery)编写文件管理应用程序,我想让用户能够取消他们的上传。

以下是一些背景信息: 当用户选择上传文件时,我将表单的目标更改为iFrame,后者将发布到perl脚本。在脚本中,我更新数据库中的一行,显示上载的当前状态。状态可以是successerrorinitializingabortexpired。当状态为abort时,我想完全停止上传。

有没有办法从钩子内杀死这个脚本? (因此我不必等待整个文件。)在旁注中,-e $filepath有效,但它仍然遍历整个文件,因此消息将在之后显示。在任何一种情况下,我都希望脚本完全停止。

添加了更多代码:

Perl:

my $cgi = CGI->new(\&hook, \%data, 0);

sub hook { 
    my $status = GetStatus();

    if(-e $$data{filepath} and $status eq "initializing"){
        # send JSON back to browser
        # insert your amazing snippet here
        ... 
    }

    if($status eq "success"){
        # continue writing file to disk
        # update db
        ... 
    }

    if($status eq "abort"){
        # cancel the upload
        # insert your amazing snippet here
        ... 
    }

} 

HTML:

<iframe id="upload_target" onload="uploadDone();"></iframe>

jQuery的:

$('#upload_form').submit(function(data){
    window.setInterval('doProgress()', 250);
});

function doProgress() {
    $.ajax({
        ...
        success: function(data){
            json = $.parseJSON(data);
            if(json.status != null){
                // json.message contains the percentage number
                $("#progressbar").reportprogress(json.message);
            }
        }
    });
}

function uploadDone() { 
    var ret = $('#upload_target').contents().find('body').text();
    var json = jQuery.parseJSON(ret);

    if(json.status != null){
        $.modal.close();
        show_message(json);
    }
}

修改 我在Google上看到,通过javascript中止请求可能是解决问题的方法。任何人都可以肯定地说这是否属实?它需要的只是将请求分配给变量,然后在其上调用abort()方法,例如:xhr.abort();

1 个答案:

答案 0 :(得分:1)

我不知道没有sourcedive确切CGI如何处理上传和调用钩子函数,但我第一次尝试停止上传将关闭STDIN。