BotBeta
Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario popular!
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Suscripción a IA
El error ERR_HTTP2_PROTOCOL_ERROR generalmente indica un problema con la conexión HTTP/2 entre tu navegador y el servidor. Podría ser causado por varios factores como problemas de red, problemas de configuración del servidor, o incluso un bug en el navegador.Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR
me salio est error
acabo de subir un video de 150mb y me lo subio por partes, esto es normal??Seguro. Aquí te dejo un ejemplo sencillo de cómo se podría ver tu archivo upload.php, asumiendo que estás usando Resumable.js para las subidas en "chunks" de tus archivos:
PHP:<?php if ($_FILES) { $tempPath = $_FILES['file']['tmp_name']; $uploadPath1 = dirname(__FILE__) . DIRECTORY_SEPARATOR; $uploadPath2 = $uploadPath1 . basename($_FILES['file']['name']); move_uploaded_file($tempPath, $uploadPath2); $answer = array('respuesta' => 'Archivo transferido'); echo json_encode($answer); } else { echo ('No hay archivos para subir'); } ?>
Esta es una versión muy básica y no tiene en cuenta la validación de los archivos ni los potenciales errores de seguridad al subir archivos. Te recomendaría que busques información sobre cómo manejar de forma segura la subida de archivos en PHP.
Sí, eso es normal y es uno de los beneficios de usar Resumable.js. Esta biblioteca divide los archivos grandes en piezas (chunks) más pequeñas para subirlos al servidor. Esto tiene varias ventajas como mejorar la eficiencia de la subida, permitir pausar y reanudar las subidas, y manejar mejor las interrupciones de la conexión de red. Después de que todas las piezas sean subidas, deberían ensamblarse de nuevo en el servidor para recrear el archivo original.acabo de subir un video de 150mb y me lo subio por partes, esto es normal??
y como las ensamblo para que quede en 1 solo como el original??Sí, eso es normal y es uno de los beneficios de usar Resumable.js. Esta biblioteca divide los archivos grandes en piezas (chunks) más pequeñas para subirlos al servidor. Esto tiene varias ventajas como mejorar la eficiencia de la subida, permitir pausar y reanudar las subidas, y manejar mejor las interrupciones de la conexión de red. Después de que todas las piezas sean subidas, deberían ensamblarse de nuevo en el servidor para recrear el archivo original.
Sorry I couldn't contact the ChatGPT think tank 🙁y como las ensamblo para que quede en 1 solo como el original??
y como uno todas las partes para que quede como el archivo original?Sí, eso es normal y es uno de los beneficios de usar Resumable.js. Esta biblioteca divide los archivos grandes en piezas (chunks) más pequeñas para subirlos al servidor. Esto tiene varias ventajas como mejorar la eficiencia de la subida, permitir pausar y reanudar las subidas, y manejar mejor las interrupciones de la conexión de red. Después de que todas las piezas sean subidas, deberían ensamblarse de nuevo en el servidor para recrear el archivo original.
Unir las partes de un archivo en el lado del servidor puede hacerse con PHP. Aquí te dejo un ejemplo sencillo de cómo puedes hacer esto:y como uno todas las partes para que quede como el archivo original?
<?php
$nombre_del_archivo = $_POST['nombre_del_archivo'];
$temp_archivo = $_FILES['archivo']['tmp_name'];
$ruta_destino = 'ruta_del_directorio/' . $nombre_del_archivo;
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
move_uploaded_file($temp_archivo, $ruta_destino);
}
?>
mysqli_query($conexion,"INSERT INTOUnir las partes de un archivo en el lado del servidor puede hacerse con PHP. Aquí te dejo un ejemplo sencillo de cómo puedes hacer esto:
PHP:<?php $nombre_del_archivo = $_POST['nombre_del_archivo']; $temp_archivo = $_FILES['archivo']['tmp_name']; $ruta_destino = 'ruta_del_directorio/' . $nombre_del_archivo; // Si existe el archivo, se añade al final (append) if (file_exists($ruta_destino)) { file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND); } else { // Si no existe, se crea con el primer chunk move_uploaded_file($temp_archivo, $ruta_destino); } ?>
Este es un código de ejemplo básico y deberás adaptarlo según tus necesidades. Por seguridad, también deberías agregar verificación y validación para asegurarte de que solo se está subiendo el tipo correcto de archivos y se está manejando correctamente cualquier error potencial.
watch
(nombre) VALUES ('".$target_gapath."')");Sí, puedes hacer esto verificando si es el último fragmento ("chunk") del archivo que se está subiendo. Resumable.js envía un parámetro llamadomysqli_query($conexion,"INSERT INTOwatch
(nombre) VALUES ('".$target_gapath."')");
puedes agregar este insert solo cuando el archivo se suba al 100%??
resumableChunkNumber
que representa el número del fragmento actual, y otro llamado resumableTotalChunks
que es el número total de fragmentos. Puedes comparar estos dos valores para detectar cuándo se ha subido el último fragmento.$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']);
// Código para mover el fragmento del archivo...
if ($esUltimoFragmento) {
mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$target_gapath."')");
}
$temp_archivo = $_FILES['file']['tmp_name'];Sí, puedes hacer esto verificando si es el último fragmento ("chunk") del archivo que se está subiendo. Resumable.js envía un parámetro llamadoresumableChunkNumber
que representa el número del fragmento actual, y otro llamadoresumableTotalChunks
que es el número total de fragmentos. Puedes comparar estos dos valores para detectar cuándo se ha subido el último fragmento.
Aquí te dejo un ejemplo de cómo puedes hacer esto:
PHP:$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']); // Código para mover el fragmento del archivo... if ($esUltimoFragmento) { mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$target_gapath."')"); }
Este es solo un ejemplo básico y es posible que necesites adaptarlo ligeramente según tu implementación específica de Resumable.js. En cualquier caso, este código debe realizar la inserción en la base de datos solo una vez que se haya subido el último fragmento del archivo.
watch
(nombre) VALUES ('".$ruta_destino."')");Sí, tu código parece correcto, pero ten en cuenta que cada vez que un nuevo archivo se carga, crearás un nuevo nombre de archivo aleatorio. Si un archivo se divide en fragmentos (chunks), cada fragmento obtendrá un nombre de archivo diferente, lo que podría causar problemas.$temp_archivo = $_FILES['file']['tmp_name'];
$ruta_destino = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4';
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
mysqli_query($conexion,"INSERT INTOwatch
(nombre) VALUES ('".$ruta_destino."')");
move_uploaded_file($temp_archivo, $ruta_destino);
}
se puede hacer asi verdad??
session_start(); // Inicia la sesión para almacenar la ruta del archivo
$temp_archivo = $_FILES['file']['tmp_name'];
if (!isset($_SESSION['ruta_destino'])) {
// Genera un nombre de archivo único para el nuevo archivo
$_SESSION['ruta_destino'] = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4';
}
$ruta_destino = $_SESSION['ruta_destino'];
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
mysqli_query($conexion,"INSERT INTO watch(nombre) VALUES ('".$ruta_destino."')");
move_uploaded_file($temp_archivo, $ruta_destino);
}
session_start();Sí, tu código parece correcto, pero ten en cuenta que cada vez que un nuevo archivo se carga, crearás un nuevo nombre de archivo aleatorio. Si un archivo se divide en fragmentos (chunks), cada fragmento obtendrá un nombre de archivo diferente, lo que podría causar problemas.
Podrías solucionar esto almacenando el nombre del archivo en una variable de sesión cuando se sube el primer fragmento, y luego reutilizando ese nombre para los fragmentos subsiguientes. Aquí tienes una idea de cómo podrías hacer esto:
PHP:session_start(); // Inicia la sesión para almacenar la ruta del archivo $temp_archivo = $_FILES['file']['tmp_name']; if (!isset($_SESSION['ruta_destino'])) { // Genera un nombre de archivo único para el nuevo archivo $_SESSION['ruta_destino'] = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4'; } $ruta_destino = $_SESSION['ruta_destino']; // Si existe el archivo, se añade al final (append) if (file_exists($ruta_destino)) { file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND); } else { // Si no existe, se crea con el primer chunk mysqli_query($conexion,"INSERT INTO watch(nombre) VALUES ('".$ruta_destino."')"); move_uploaded_file($temp_archivo, $ruta_destino); }
Este código garantizará que todos los fragmentos del mismo archivo se carguen con el mismo nombre de archivo. Recuerda cerrar la sesión cuando hayas terminado de subir archivo para liberar el recurso.
watch
(nombre) VALUES ('".$ruta_destino."')");Casi, pero debes recordar de incluir la lógica de la sesión para mantener el nombre de archivo constante a través de todas las partes de la carga. Aquí está tu código modificado:session_start();
error_reporting(0);
if(!($conexion = mysqli_connect("localhost", "admin_rooter", "4368119vV")));
mysqli_select_db($conexion,"admin_default");
if(!empty($_FILES)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$temp_archivo = $_FILES['file']['tmp_name'];
$ruta_destino = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4';
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
mysqli_query($conexion,"INSERT INTOwatch
(nombre) VALUES ('".$ruta_destino."')");
move_uploaded_file($temp_archivo, $ruta_destino);
}
}
dices algo asi??
session_start();
error_reporting(0);
if(!($conexion = mysqli_connect("localhost", "admin_rooter", "4368119vV")));
mysqli_select_db($conexion,"admin_default");
if(!empty($_FILES)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$temp_archivo = $_FILES['file']['tmp_name'];
// Aquí verificamos si ya se guardó un nombre de archivo en la sesión
if (!isset($_SESSION['ruta_destino'])) {
$_SESSION['ruta_destino'] = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4';
}
$ruta_destino = $_SESSION['ruta_destino'];
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$ruta_destino."')");
move_uploaded_file($temp_archivo, $ruta_destino);
}
}
}
$_SESSION['ruta_destino']
. En las subidas de fragmentos subsiguientes, se reutilizará el mismo nombre de archivo.vale y como hago para termnar la session que me dijiste??Casi, pero debes recordar de incluir la lógica de la sesión para mantener el nombre de archivo constante a través de todas las partes de la carga. Aquí está tu código modificado:
PHP:session_start(); error_reporting(0); if(!($conexion = mysqli_connect("localhost", "admin_rooter", "4368119vV"))); mysqli_select_db($conexion,"admin_default"); if(!empty($_FILES)){ if(is_uploaded_file($_FILES['file']['tmp_name'])){ $temp_archivo = $_FILES['file']['tmp_name']; // Aquí verificamos si ya se guardó un nombre de archivo en la sesión if (!isset($_SESSION['ruta_destino'])) { $_SESSION['ruta_destino'] = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4'; } $ruta_destino = $_SESSION['ruta_destino']; // Si existe el archivo, se añade al final (append) if (file_exists($ruta_destino)) { file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND); } else { // Si no existe, se crea con el primer chunk mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$ruta_destino."')"); move_uploaded_file($temp_archivo, $ruta_destino); } } }
Con este código, cuando se suba el primer fragmento de cada archivo, se generará un nombre de archivo único y se almacenará en la variable de sesión$_SESSION['ruta_destino']
. En las subidas de fragmentos subsiguientes, se reutilizará el mismo nombre de archivo.
Puedes terminar la sesión o borrar la variable de sesión después de haber procesado todos los fragmentos del archivo. En tu caso, parece que quieres borrar la variable de sesión después de que el último fragmento haya sido subido y procesado. Aquí te dejo un ejemplo de cómo puedes hacer esto:vale y como hago para termnar la session que me dijiste??
$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']);
// Código para mover el fragmento del archivo...
if ($esUltimoFragmento) {
// Realiza la inserción en la base de datos
mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$ruta_destino."')");
// Borra la variable de sesión
unset($_SESSION['ruta_destino']);
}
esto debo de agregarlo en upload.php verdad?Puedes terminar la sesión o borrar la variable de sesión después de haber procesado todos los fragmentos del archivo. En tu caso, parece que quieres borrar la variable de sesión después de que el último fragmento haya sido subido y procesado. Aquí te dejo un ejemplo de cómo puedes hacer esto:
PHP:$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']); // Código para mover el fragmento del archivo... if ($esUltimoFragmento) { // Realiza la inserción en la base de datos mysqli_query($conexion,"INSERT INTO `watch`(nombre) VALUES ('".$ruta_destino."')"); // Borra la variable de sesión unset($_SESSION['ruta_destino']); }
Ese código borra la variable de sesión una vez que el último fragmento del archivo ha sido subido y procesado. Esto significa que un nuevo nombre de archivo será generado para la próxima vez que cargues un archivo.
Sí, debes agregar este código al script de PHP que estás utilizando para manejar la carga de archivos. En tu caso, este script parece ser upload.php. Recuerda que este código de ejemplo puede necesitar modificaciones para que funcione correctamente dentro del contexto de tu aplicación. Ten en cuenta también cualquier consideración de seguridad relevante al aceptar y manejar archivos subidos por usuarios.esto debo de agregarlo en upload.php verdad?
session_start();Sí, debes agregar este código al script de PHP que estás utilizando para manejar la carga de archivos. En tu caso, este script parece ser upload.php. Recuerda que este código de ejemplo puede necesitar modificaciones para que funcione correctamente dentro del contexto de tu aplicación. Ten en cuenta también cualquier consideración de seguridad relevante al aceptar y manejar archivos subidos por usuarios.
watch
(nombre) VALUES ('".$ruta_destino."')");Sí, tu código parece correcto. Ten en cuenta que el script está asumiendo que los fragmentos vienen en orden. Es decir, si un fragmento sostenido llega antes del primer fragmento, podría haber un comportamiento inesperado. Pero si estás seguro de que los fragmentos siempre llegan en orden, este código debería funcionar según lo previsto.session_start();
error_reporting(0);
if(!($conexion = mysqli_connect("localhost", "admin_rooter", "4368119vV")));
mysqli_select_db($conexion,"admin_default");
if(!empty($_FILES)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$temp_archivo = $_FILES['file']['tmp_name'];
// Aquí verificamos si ya se guardó un nombre de archivo en la sesión
if (!isset($_SESSION['ruta_destino'])) {
$_SESSION['ruta_destino'] = 'upload/'.mt_rand(1,100).bin2hex(random_bytes(mt_rand(5,15))).'.mp4';
}
$ruta_destino = $_SESSION['ruta_destino'];
// Si existe el archivo, se añade al final (append)
if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else { // Si no existe, se crea con el primer chunk
mysqli_query($conexion,"INSERT INTOwatch
(nombre) VALUES ('".$ruta_destino."')");
move_uploaded_file($temp_archivo, $ruta_destino);
}
}
}
$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']);
// Código para mover el fragmento del archivo...
if ($esUltimoFragmento) {
// Borra la variable de sesión
unset($_SESSION['ruta_destino']);
}
deberia de quedar asi??
podrias hacer esto que me dices para evitar errores?Sí, tu código parece correcto. Ten en cuenta que el script está asumiendo que los fragmentos vienen en orden. Es decir, si un fragmento sostenido llega antes del primer fragmento, podría haber un comportamiento inesperado. Pero si estás seguro de que los fragmentos siempre llegan en orden, este código debería funcionar según lo previsto.
Además, deberías chequear la existencia de las claves 'resumableChunkNumber' y 'resumableTotalChunks' antes de usarlas para evitar errores.
Recuerda siempre hacer pruebas exhaustivas para asegurarte de que todo funciona como esperabas.
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?