我通过AJAX请求将一些图像发送到Perl脚本
$("form#multiupload").submit(function(){
var formData = new FormData($(this)[0]);
$.ajax({
url: "/cgi-bin/upload_my_images.pl",
type: 'POST',
async: false,
cache: false,
contentType: false,
processData: false,
data: formData,
success: function (data) {
alert(data)
}
});
return false;
});
我使用Perl将图像上传到服务器
my @fh = $cgi->param("img");
foreach my $fh (@fh) {
my $uploaddir = 'somedir';
my $serverFile = $uploaddir . "/" . ( split( /[\\\/]/, $filename ) )[-1];
my $buffer;
open( FILE, ">$serverFile" ) or die $!;
binmode FILE;
binmode $fh;
while ( my $bytesread = read( $fh, $buffer, 1024 ) ) {
print FILE $buffer;
}
close(FILE);
}
上传成功后,我收到提醒信息。
是否有可能在所有图片上传成功后收到消息,或者我是否必须使用自己的AJAX请求上传每个图片?
答案 0 :(得分:1)
首先(最重要的是)摆脱async: false
。使用它是一种可怕的做法,因为它会阻止UI线程。如果您检查控制台,那么您将看到浏览器警告您不要使用它。
其次,如果您想要上传每个文件的个别消息,那么您需要单独发送它们,因为progress
事件仅适用于整个请求。
你可以用老式的方式做,并发送一个请求进行上传,然后每隔1秒发送一次其他请求来监控其进度并检查上传完成的文件,但这会给你带来额外的负担服务器,坦率地说,是一个丑陋的小屋。
答案 1 :(得分:0)
我用这种方式解决了问题:
也许不是最好的方式,但它运作正常......