subir video con dropzone

 <?php require_once "../cabesa.php"; ?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Subir Archivos de Video</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/dropzone.min.css" rel="stylesheet">
    <style>
        .dropzone {
            border: 2px dashed #0087F7;
            border-radius: 5px;
            background: white;
        }
    </style>
</head>
<body>
<div class="container mt-5">
    <div class="row">
        <div class="col-md-6">
            <h3>Subir Archivos de Video</h3>
            <form id="myDropzone" class="dropzone">
                <div class="row mt-3">
                    <div class="col-6 mb-3">
                        <label for="caso_id" class="form-label">Caso_id</label>
                        <input type="text" class="form-control" id="caso_id" name="caso_id" value="<?php echo htmlspecialchars($_GET['caso_id']); ?>" readonly>
                    </div>
                    <div class="col-6 mb-3">
                        <label for="carpeta" class="form-label">Carpeta</label>
                        <input type="text" class="form-control" id="carpeta" name="carpeta" required>
                    </div>
                    <div class="col-auto mb-3">
                        <label for="fecha" class="form-label">Fecha</label>
                        <input type="date" class="form-control" id="fecha" name="fecha" required>
                    </div>
                    <div class="col-auto mb-3">
                        <label for="resolvio" class="form-label">Resolvió</label>
                        <input type="text" class="form-control" id="resolvio" name="resolvio" required>
                    </div>
                </div>
                <button type="button" class="btn btn-success mt-3" id="submitButton">Guardar Información</button>
            </form>
        </div>
        <div class="col-md-6">
            <table id="solicitudtabla" class="table">
                <thead class="thead-dark">
                    <tr>
                        <th>Id</th>
                        <th>Carpeta</th>
                        <th>Fecha</th>
                        <th>Resolvio</th>
                        <th>Video</th>
                    </tr>
                </thead>
                <tbody id="tablaBody"></tbody>
            </table>
        </div>
    </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/dropzone.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
    Dropzone.autoDiscover = false;

    const myDropzone = new Dropzone("#myDropzone", {
        url: "audienciaDropzon.php",
        autoProcessQueue: false,
        acceptedFiles: "video/*",
        addRemoveLinks: true,
        init: function() {
            this.on("sending", function(file, xhr, formData) {
                formData.append("caso_id", document.querySelector("#caso_id").value);
                formData.append("carpeta", document.querySelector("#carpeta").value);
                formData.append("fecha", document.querySelector("#fecha").value);
                formData.append("resolvio", document.querySelector("#resolvio").value);
                formData.append("action", "crear");
            });
            this.on("success", function(file, response) {
                console.log(response);
                obtenerAudiencias();
                this.removeFile(file);
            });
            this.on("error", function(file, response) {
                console.error(response);
            });
        }
    });

    document.querySelector("#submitButton").addEventListener("click", function() {
        if (myDropzone.files.length === 0) {
            alert("Por favor, seleccione un archivo de video para cargar.");
        } else {
            myDropzone.processQueue();
        }
    });

    function obtenerAudiencias() {
        $.ajax({
            url: "audienciaDropzon.php",
            type: "GET",
            data: { caso_id: $("#caso_id").val() },
            dataType: "json",
            success: function(response) {
                const tablaBody = $("#tablaBody");
                tablaBody.empty();
                response.result.forEach(function(audiencia) {
                    const row = $("<tr></tr>");
                    row.append(`<td>${audiencia.id}</td>`);
                    row.append(`<td>${audiencia.carpeta}</td>`);
                    row.append(`<td>${audiencia.fecha}</td>`);
                    row.append(`<td>${audiencia.resolvio}</td>`);
                    row.append(`<td><a href="${audiencia.ruta}" target="_blank">Ver Video</a></td>`);
                    tablaBody.append(row);
                });
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.error("Error al obtener las audiencias:", textStatus, errorThrown);
            }
        });
    }

    $(document).ready(function() {
        obtenerAudiencias();
    });
</script>
</body>
</html>


SERVIDOR::
<?php
class Conexion
{
    static public function conectar()
    {
        try {
            return new PDO("mysql:host=localhost;dbname=despacho;charset=utf8", "root", "Juzgado-01");
        } catch (PDOException $e) {
            echo "Error de conexión: " . $e->getMessage();
            exit;
        }
    }
}

class AudienciasModel extends Conexion
{
    static public function obtenerAudiencias($caso_id)
    {
        $stmt = Conexion::conectar()->prepare("
            SELECT a.*, c.numero_expediente
            FROM audiencias a
            JOIN casos c ON a.caso_id = c.id
            WHERE a.caso_id = :caso_id
        ");
        $stmt->bindParam(":caso_id", $caso_id, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    static public function crearAudiencia($datos)
    {
        $stmt = Conexion::conectar()->prepare("SELECT id FROM casos WHERE id = :caso_id");
        $stmt->bindParam(":caso_id", $datos['caso_id'], PDO::PARAM_INT);
        $stmt->execute();
        $caso = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$caso) {
            return "case_not_found";
        }

        $stmt = Conexion::conectar()->prepare("
            INSERT INTO audiencias (caso_id, carpeta, fecha, resolvio, ruta)
            VALUES (:caso_id, :carpeta, :fecha, :resolvio, :ruta)
        ");
        $stmt->bindParam(":caso_id", $datos['caso_id'], PDO::PARAM_INT);
        $stmt->bindParam(":carpeta", $datos['carpeta'], PDO::PARAM_STR);
        $stmt->bindParam(":fecha", $datos['fecha'], PDO::PARAM_STR);
        $stmt->bindParam(":resolvio", $datos['resolvio'], PDO::PARAM_STR);
        $stmt->bindParam(":ruta", $datos['ruta'], PDO::PARAM_STR);

        if ($stmt->execute()) {
            return "success";
        } else {
            return "error";
        }
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['caso_id'])) {
    $caso_id = intval($_GET['caso_id']);
    $audiencias = AudienciasModel::obtenerAudiencias($caso_id);
    echo json_encode(['result' => $audiencias]);
    exit;
}

// Verifica si la solicitud se realizó mediante el método POST y si la acción especificada es 'crear'
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action']) && $_POST['action'] == 'crear') {

    // Verifica si se ha subido un archivo sin errores
    if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK) {

        // Recoge los datos enviados en el formulario
        $caso_id = intval($_POST['caso_id']); // Convierte el caso_id a un entero
        $carpeta = $_POST['carpeta'];         // Nombre de la carpeta
        $fecha = $_POST['fecha'];             // Fecha del evento
        $resolvio = $_POST['resolvio'];       // Nombre de la persona que resolvió el caso

        // Obtiene el año y el mes actuales
        $anio = date('Y');
        $mes = date('m');
       
        // Define el directorio de carga basado en el año y mes actuales
        $uploadDir = __DIR__ . "/videos/$anio/$mes/";

        // Si el directorio no existe, lo crea con permisos 0777 y permite la creación de directorios padres
        if (!is_dir($uploadDir)) {
            mkdir($uploadDir, 0777, true);
        }

        // Obtiene el nombre base del archivo subido
        $fileName = basename($_FILES['file']['name']);

        // Define la ruta completa del archivo en el servidor
        $filePath = $uploadDir . $fileName;

        // Mueve el archivo subido a la ubicación definida en $filePath
        if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
            // Define la ruta relativa del archivo para almacenar en la base de datos
            $ruta = "videos/$anio/$mes/" . $fileName;

            // Crea un array con los datos recopilados para la audiencia
            $datos = [
                'caso_id' => $caso_id,
                'carpeta' => $carpeta,
                'fecha' => $fecha,
                'resolvio' => $resolvio,
                'ruta' => $ruta
            ];

            $resultado = AudienciasModel::crearAudiencia($datos);

            // Envía una respuesta JSON con los datos de la audiencia
            echo json_encode(['resultado' => $resultado]);
        } else {
            // En caso de error al mover el archivo, imprime "error"
            echo json_encode(['resultado' => 'error-mover el archivo']);
        }
    } else {
        // En caso de error con el archivo subido, imprime "error"
        echo json_encode(['resultado' => 'error cargar archivo']);
    }
    // Finaliza la ejecución del script
    exit;
}
?>

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos