问题出在文件 UploadHandler.php 中的第 496 行和第 1429 行
///////////////////////////////////////// ////////////////////////////
第 496 行代码
///////////////////////////////////////// //////////////////////////
protected function get_unique_filename($file_path, $name, $size, $type, $err
or,
$index, $content_range) {
while(is_dir($this->get_upload_path($name))) {
$name = $this->upcount_name($name);
}
// Keep an existing filename if this is part of a chunked upload:
//BELOW is line 496
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
while (is_file($this->get_upload_path($name))) {
if ($uploaded_bytes === $this->get_file_size(
$this->get_upload_path($name))) {
break;
}
$name = $this->upcount_name($name);
}
return $name;
}
///////////////////////////////////////// ////////////////////////////
以及第 1429 行的代码
///////////////////////////////////////// ///////////////////////////
$response = array($this->options['param_name'] => $files);
$name = $file_name ? $file_name : $upload['name'][0];
$res = $this->generate_response($response, $print_response);
if(is_file($this->get_upload_path($name))){
// BELOW IS LINE 1429
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
$totalSize = $this->get_file_size($this->get_upload_path($name));
if ($totalSize - $uploaded_bytes - $this->options['readfile_chunk_size'] < 0) {
$this->onUploadEnd($res);
}else{
$this->head();
$this->body(json_encode($res));
}
}else{
$this->head();
$this->body(json_encode($res));
}
当上传的文件没有被分块时,问题在于 $content_range[1] 的值。需要检查 $content_range[1] 的值以查看其是否设置。
以下是两个引发错误的代码摘录的解决方案。首先是第 496 行的代码
protected function get_unique_filename($file_path, $name, $size, $type, $error,
$index, $content_range) {
while(is_dir($this->get_upload_path($name))) {
$name = $this->upcount_name($name);
}
// Keep an existing filename if this is part of a chunked upload:
if(isset($content_range[1])){
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
}
while (is_file($this->get_upload_path($name))) {
if(isset($uploaded_bytes)){
if ($uploaded_bytes === $this->get_file_size(
$this->get_upload_path($name))) {
break;
}
}
$name = $this->upcount_name($name);
}
return $name;
}
第二位代码在 1429 左右。
$response = array($this->options['param_name'] => $files);
$name = $file_name ? $file_name : $upload['name'][0];
$res = $this->generate_response($response, $print_response);
if(is_file($this->get_upload_path($name))){
if(isset($content_range[1])){
$uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]);
}
else{
$uploaded_bytes = 0;
}
$totalSize = $this->get_file_size($this->get_upload_path($name));
if ($totalSize - $uploaded_bytes - $this->options['readfile_chunk_size'] < 0) {
$this->onUploadEnd($res);
}else{
$this->head();
$this->body(json_encode($res));
}
}else{
$this->head();
$this->body(json_encode($res));
}
return $res;