Responsive File Manager and TinyMCE

老子叫甜甜 提交于 2021-01-29 14:44:49

问题


I'm using Responsive File Manager 9.14.0 with tinyMCE v 5 in a Laravel v 6 App - I followed a tutorial in doing the setup. Everything works fine apart from when the button 'Start upload' is clicked - I get this error: Unexpected token < in JSON at position 0. This is displayed in the page on the back end in the php error log I get these two errors.

[05-Mar-2020 12:08:17 Europe/Rome] PHP Notice: Trying to access array offset on value of type null in /var/www/html/laratest/public/tinymce/filemanager/UploadHandler.php on line 496

[05-Mar-2020 12:08:17 Europe/Rome] PHP Notice: Trying to access array offset on value of type null in /var/www/html/laratest/public/tinymce/filemanager/UploadHandler.php on line 1429.

What is strange is that the error does not occur with large files. Also what is strange is that even though this error is given it stills downloads the file okay. Here my tinymce config

tinymce.init({
    selector: 'textarea',
    plugins: 'image code a11ychecker advcode casechange formatpainter linkchecker lists checklist media mediaembed pageembed permanentpen powerpaste table advtable tinymcespellchecker',
    toolbar: ' link image casechange checklist code formatpainter pageembed permanentpen table',
    image_title: true, 
    automatic_uploads: true,
    file_picker_types: 'image',
    external_filemanager_path:"{{url('tinymce/filemanager')}}/",
            filemanager_title:"Responsive Filemanager" ,
            external_plugins: { "filemanager" : "{{url('tinymce')}}/filemanager/plugin.min.js"},

  });

回答1:


The problem is on line 496 and line 1429 in the file UploadHandler.php

//////////////////////////////////////////////////////////////////////////////////

Code around line 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;
    }

//////////////////////////////////////////////////////////////////////////////////

And the code around line 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));
}

The problem is with the value of $content_range[1] when the file being uploaded is not being chunked. The value of $content_range[1] needs to be checked to see if its set.

Below is the solution to the two extracts of code that have been throwing the error. First the code around line 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;
    }

And the second bit code around 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;


来源:https://stackoverflow.com/questions/60544865/responsive-file-manager-and-tinymce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!