【问题标题】:Input file variable with Jquery使用 Jquery 输入文件变量
【发布时间】:2017-10-07 02:27:38
【问题描述】:

我需要解决一个小问题。 我试图用 jquery 发送 tmp 图像,但结果未定义。 我的代码:

    $(document).on("click",".subImagen", function(e) {

    // VARIABLES
    //var imagen = $('#sbImagen').val();
    var imagen = $('#sbImagen')[0].files[0];
    var imagenSize = $('#sbImagen')[0].files[0].size;
    var imagenNombre = $('#sbImagen')[0].files[0].name;
    var imagenType = $('#sbImagen')[0].files[0].type;
    var params = '&imagen='+imagen+'&imagenSize='+imagenSize+'&imagenNombre='+imagenNombre+'&imagenType='+imagenType;       

    // ENVIO DE VARIABLES
    $.post('classes/subirImagen', params, function(jsondatareg){            
        if(jsondatareg.validacion == 'exito'){  
            var url = 'inventario_f';
            swal({
                title: "IMAGEN SUBIDA",
                text: jsondatareg.mensaje,
                timer: 2500,
                type: "success",
                showConfirmButton: false
            });
            setTimeout(function () {
                window.location = url;
            }, 3000);
        }
        if(jsondatareg.validacion == 'error'){              
            swal({
                title: "ERROR",
                text: jsondatareg.mensaje,
                timer: 2500,
                type: "error",
                showConfirmButton: false
            });
        }
    },'json');  
});

此代码工作正常,但我也需要发送 tmp_name

php代码:

<?php
header("Content-Type: text/html;charset=utf-8");

$imagen = $_REQUEST['imagen'];
$imagenSize = $_REQUEST['imagenSize'];
$imagenNombre = $_REQUEST['imagenNombre'];
$imagenType = $_REQUEST['imagenType'];

if (($imagenNombre == !NULL) && ($imagenSize <= 20000000)){
    if ($imagenType == "image/png"){
        $directorio = $_SERVER['DOCUMENT_ROOT'].'/assets/images/productos/';
        move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$imagenNombre); 
        $datareg['validacion']  = 'exito';
        $datareg['mensaje'] = "SE HA SUBIDO LA IMAGEN CORRECTAMENTE.";
    }else{
        $datareg['validacion']  = 'error';
        $datareg['mensaje'] = "LA IMAGEN QUE INTENTAS SUBIR NO TIENE EL FORMATO .PNG";
    }
}else{
    if($imagenNombre == !NULL){ 
        $datareg['validacion']  = 'error';
        $datareg['mensaje'] = "LA IMAGEN SUPERA EL TAMAÑO PERMITIDO.";
    }else{ 
        $datareg['validacion']  = 'error';
        $datareg['mensaje'] = "NO HAS PUESTO NINGUNA IMAGEN.";
    }   
}
echo json_encode($datareg);
?>

问题是下一行:move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$imagenNombre); 因为我无法发送 $ _FILES['imagen']['tmp_name'] 与 jquery。我该如何解决?

Variables

【问题讨论】:

    标签: javascript php jquery


    【解决方案1】:

    根据我的经验,我认为不可能获取 tmp_name,因为它是指上传文件时存储在服务器上的文件的临时位置。您可能想要做的是使用 ajax 上传文件。它应该会产生与您已经在做的类似的效果:)

    使用 ajax,您可以使用 FileData 发送您的图像对象,如下面的 html 所示:

    <form class="form" action="" method="POST" enctype="multipart/form-data">
        <input type="file" name="upload-file">
    </form>
    

    然后在 jQuery 中,在上传按钮单击事件上:

    var formData = new FormData($('.form')[0]);
    
                    $.ajax({
                        url: "upload.php",
                        type: "POST",
                        data: formData,
                        contentType: false,
                        cache: false,
                        processData:false,
                        success: function(data)
                        {
                           console.log('success');
                        }
                    });
    

    然后在您的 PHP 文件(在我的示例中,称为“upload.php”)中,您可以使用 $_FILE 对象来获取您的文件,然后以这种方式从中获取任何信息...

    $_FILES["csv-upload-file"]
    

    【讨论】:

    • 如果不使用表单发货,可以只发送ajax输入吗?
    • @NeftaliAcosta 这取决于输入是什么......如果输入是一个文件,那么我不这么认为,但如果它是文本、日期、收音机、复选框,那么你可以.为此,您需要像在我的示例中一样创建您的 FormData 对象,但稍有不同,var formData = new FormData(); 也是如此,然后使用 formData.append('variable_name', variable_value); 然后在 ajax 中发送该 formData,就像在我的示例中一样。
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2014-04-18
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多