我正在用Perl,PHP和JavaScript(jQuery)编写文件管理应用程序,我想让用户能够取消他们的上传。
以下是一些背景信息:
当用户选择上传文件时,我将表单的目标更改为iFrame,后者将发布到perl脚本。在脚本中,我更新数据库中的一行,显示上载的当前状态。状态可以是success
,error
,initializing
,abort
或expired
。当状态为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();
答案 0 :(得分:1)
我不知道没有sourcedive确切CGI
如何处理上传和调用钩子函数,但我第一次尝试停止上传将关闭STDIN。