如何使用formData(jQuery)处理多个文件的输入并在PHP中处理它们?

时间:2017-08-31 17:01:41

标签: javascript php jquery html ajax

我是处理文件的新手,我想在这种情况下只使用一种输入类型file上传多个文件,但这个输入不在form标签内,这个工作当我点击按钮

 <input type="file" class="form-control" id="imagenArticulo" multiple="multiple">

当我的图像被选中时我按下按钮并执行此操作

$('#guardarArticulo').click(function(e) {

    e.preventDefault();

    let imagen    = $('#imagenArticulo').prop('files');

    console.log(imagen);

    let form_data = new FormData();

    form_data.append('imagen', imagen);

    $.ajax({

        type: 'post',
        cache: false,
        contentType: false,
        processData: false,
        url: '../includes/productos/guardar_producto.php',
        data: form_data,
        dataType: 'json',

        beforeSend: function() {

        },

        success: function(respuesta) {

            console.log(respuesta);

            if (respuesta.tipo == 0) {

                window.location.reload(true);
            }

            if (respuesta.tipo == 1) {

                //do soemthing
            }
        }
    });
});

点击后,变量console.log的第一个imagen显示此

enter image description here

最后用PHP尝试处理它们时我会这样做

 if (!is_null($_FILES['imagen']['name'])) {

    if ($_FILES['file']['error'] == 0) {


        if (!is_dir($ruta)) {

            mkdir($ruta);
            mkdir($ruta . '/original');
            mkdir($ruta . '/thumbnail');
        }


        $numero_de_imagenes = count($_FILES['imagen']['tmp_name']);


        for ($i = 0; $i < $numero_de_imagenes; $i++) {

            $imagen  = $_FILES['imagen']['name'][$i];
            $img_tmp = $_FILES['imagen']['tmp_name'][$i];

            $formato = strtolower(pathinfo($imagen, PATHINFO_EXTENSION)); 


            if (in_array($formato, $formatos_validos)) {

                $ext_tmp = explode('.', $imagen);

                $imagen = sha1($imagen.$random) . '.' . end($ext_tmp);

                $ruta = $ruta . '/original/' . $imagen;

                move_uploaded_file($img_tmp, $ruta);


                list($ancho, $alto) = getimagesize($ruta);

                if ($_FILES['imagen']['size'][$i] > 524288 || $ancho > 500 || $alto > 500) {

                    comprimir($imagen, $fuente, $fuente, 500, 500, 90);
                }

                comprimir($imagen, $fuente, $destino, 100, 100, 90);
            }
        }
    }

}

我以前使用过这段代码,但只是为了一个文件,新的部分是添加for循环,但是当我按下点击时,ajax响应没有显示任何内容,没有显示错误或其他什么,我想知道我错过了什么或做错了,算法之前的代码我试图打印$_FILES['imagen']以查看它是否有内容但是没有显示任何内容,我希望你能帮助我,谢谢。

0 个答案:

没有答案