Загружайте несколько файлов с помощью Ajax, прошедшего санитарную обработку и имеющего ограничения - PullRequest
0 голосов
/ 24 января 2019

Мне нужно найти ошибку моего кода, чтобы продолжить загрузку файлов на мой сервер, отправка AJAX такова:

                        //Formulario Crear Imagen Objeto _ Envio Ajax

                        $(function(){
                            $("#formulario_CrearImagenObjeto").on("submit", function(e){

                                e.preventDefault();
                                var f = $(this);
                                var formData = new FormData(document.getElementById("formulario_CrearImagenObjeto"));
                                $.ajax({
                                    url: "./ajaxpaginaobjeto/Formulario_CrearImagenObjeto.php",
                                    type: "post",
                                    dataType: "html",
                                    data: formData,
                                    cache: false,
                                    contentType : false,
                                    processData: false,
                                    success: function (data) {
                                        $('#CrearObjeto_Respuesta2').html(data);   
                                    }
                                });

                            });
                        });

Я не могу найти ошибку для отправки нескольких файлов,ранее это работало только для 1 файла: /.После того, как данные были отправлены, я взял их в PHP и изменил с помощью функции, чтобы зарегистрировать их в базе данных:

function upload_img($file,$nombre="",$ruta="",$max_size= "5000000",$max_archivos=5){
            $tipos_de_archivos= array("image/png");

            // Declare Route and Name by default
            if ($ruta=="") { $ruta = $_SERVER['DOCUMENT_ROOT']."/image/".$Tipo_Objeto; }
            if ($nombre=="") { $nombre = $file[$key_files[0]]['name']; }

            // We verify if there is a file with the same name in the Test folder, if there is not, the upload does not continue and it notifies a change of name
                if(file_exists($ruta)){
                    return "<br><strong style='font-weight: normal; color:red;'>A file with the same name already exists on the server, change the name before uploading it again.</strong><BR>";
                }

            // Multiple wrong answers to different conditions
            $key_files=array_keys($file);
            $numero_de_archivos= count($file[$key_files[0]]['name']);
            if ($numero_de_archivos<1) {return '<div class="content-box-red">No file has been loaded.</div>';}
            if ($numero_de_archivos>$max_archivos) {return '<div class="content-box-red">You can only upload<b>'.$max_archivos.' files</b> both.</div>';}
            if ( !is_array($file[$key_files[0]]['tmp_name']) ){return '<div class="content-box-red">The files must be uploaded as an array.</div>';}

            // We take the data from the Array files in variables separately
            $tmp_name= $file[$key_files[0]]['tmp_name'];
            $type= $file[$key_files[0]]['type'];
            $size= $file[$key_files[0]]['size'];
            $name= $file[$key_files[0]]['name'];
            $error= $file[$key_files[0]]['error'];

            // Multiple wrong answers to different conditions
            foreach ($tmp_name as $k => $v) {
                if (!is_uploaded_file($v)) {return '<div class="content-box-red">The file <b>'.$name[$k].'</b> has given error.</div>';}
            }
            foreach ($error as $k => $v) {
                if ($v!==0) {return '<div class="content-box-red">The file <b>'.$name[$k].'</b> has given error.</div>';}
            }
            foreach ($type as $k => $v) {
                if (!in_array($v, $tipos_de_archivos)){return '<div class="content-box-red">The file <b>'.$name[$k].'</b> its not allowed. Only PNG files.</div>';}
            }
            foreach ($size as $k => $v) {
                // We apply the validation to the collected file, if it does not pass the validation it shows an error and it does not continue
                check_valid_image_size($size[$k]);

                if ($v>$max_size) {return '<div class="content-box-red">The file <b>'.$name[$k].'</b> exceeds the allowed size.</div>';}
            }

            // Remove special characters from each file
            foreach ($name as $k => $v) {
                $extension = end(explode('.', $v));
                //$nombre_final[$k]=eliminar_simbolos($nombre).'-'.date('dmYHis').'-'.$k.'.'.$extension; 
                $nombre_final[$k]=eliminar_simbolos($nombre).$extension; 
            }

            // I move the files to the server and update BD with each of them
            foreach ($tmp_name as $k => $v) {
                $destino= $ruta.$nombre_final[$k];

                    // We create an address of the file directly to the server by real route (To be able to operate with functions of modification, deletion, etc)
                        $add=$_SERVER['DOCUMENT_ROOT'].$ruta.$name[$k];

                    // We create another address to the file but coming to it from the domain
                        $paginaop = "../../..";
                        $add_2=$paginaop.$ruta.$name[$k];

                if(!move_uploaded_file($v, $destino)){return '<div class="content-box-red">No se ha podido mover el archivo al servidor.</div>';

                }else{

                    // An insert of the new image is made to the database to have its validation follow-up
                    $fechaactual_Registro = date("Y-m-d H:i:s"); 
                    $Insertar_Objeto_imginport=mysqli_query($conect,"
                    INSERT INTO TableBD(Column,Column,Column,Column,Column,Column,Column,Column) 
                    VALUES ('$data','$data','$data','$data','$data','$data','$data','$data')             
                                ;"); 


                }
                $n[]=$nombre_final[$k];
            }
        return $n;
        }

        upload_img($_FILES['uploadedfile'],$nombre);

Наконец, я выполняю функцию и возвращаю эквивалентный ответ на главную страницу вdiv # CrearObjeto_Respuesta2 , ничего не выполняется при попытке загрузить какой-либо файл, что связано с тем, не доставляются ли файлы Ajax?Я что-то упускаю в функции?

Я использую эти две функции в функции upload_img , чтобы очистить специальные символы и ограничить пропорции, которые могут быть загружены, я оставляю здесь для любых ошибок:

function eliminar_simbolos($string){
            $string = trim($string);
            $string = str_replace(
                array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
                array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
                $string
            );
            $string = str_replace(
                array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
                array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
                $string
            );
            $string = str_replace(
                array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
                array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
                $string
            );
            $string = str_replace(
                array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
                array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
                $string
            );
            $string = str_replace(
                array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
                array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
                $string
            );
            $string = str_replace(
                array('ñ', 'Ñ', 'ç', 'Ç'),
                array('n', 'N', 'c', 'C',),
                $string
            );
            $string = str_replace(
                array("\\", "¨", "º", "-", "~",
                    "#", "@", "|", "!", "\"",
                    "·", "$", "%", "&", "/",
                    "(", ")", "?", "'", "¡",
                    "¿", "[", "^", "<code>", "]",
                    "+", "}", "{", "¨", "´",
                    ">", "< ", ";", ",", ":",
                    ".", " "),
                '-',
                $string
            );
        return $string;
        } 

        function check_valid_image_size( $file ) {
            $allowed_mimetypes = array('image/gif', 'image/jpeg', 'image/png', 'image/bmp');

            if (!in_array($file['type'], $allowed_mimetypes)){
                return $file;
            }

            $image = getimagesize($file['tmp_name']);

            $minimum = array(
                'width' => '199',
                'height' => '199'
            );
            $maximum = array(
                'width' => '201',
                'height' => '201'
            );

            $image_width = $image[0];
            $image_height = $image[1];

            $too_small = "<strong style='font-weight: normal; color:red;'>The image is very small. The minimum dimension is {$minimum['width']} x {$minimum['height']} pixels. Upload an image with a resolution of 200x200 pixels.</strong><BR>";
            $too_large = "<strong style='font-weight: normal; color:red;'>The image is very large. The maximum dimension is {$maximum['width']} x {$maximum['height']} pixels. Upload an image with a resolution of 200x200 pixels.</strong><BR>";

            if ( $image_width < $minimum['width'] || $image_height < $minimum['height'] ) {
                // add in the field 'error' of the $file array the message
                $file['error'] = $too_small;
                return $file;
            }elseif ( $image_width > $maximum['width'] || $image_height > $maximum['height'] ) {
                //add in the field 'error' of the $file array the message
                $file['error'] = $too_large;
                return $file;
            }else {
                return $file;
            }
        }

Надеюсь, вы поможете мне, привет

...