Tema para preguntas random a Chatgpt 🤖

  • Autor Autor Carlos Arreola
  • Fecha de inicio Fecha de inicio
podrias darme los codigos tu porfa
Crear un código específico sería muy extenso y dependiente de tu entorno. Sin embargo, aquí te proporciono un ejemplo sencillo de cómo inicializar Resumable.js y cómo podrías manejar los eventos en el lado del cliente:

HTML:
HTML:
<input type="file" id="browseButton">
<button id="uploadButton">Subir</button>

JavaScript:
JavaScript:
var r = new Resumable({
  target: '/upload_endpoint',
  chunkSize: 1*1024*1024,
  simultaneousUploads: 3,
  testChunks: true,
  throttleProgressCallbacks: 1,
});

r.assignBrowse(document.getElementById('browseButton'));

document.getElementById('uploadButton').addEventListener('click', function(){
  if (r.files.length > 0){
    r.upload();
  }
});

r.on('fileSuccess', function(file){
  console.log('Subida completa');
});

Este código asigna un botón de navegación y subida. Cuando un archivo se selecciona mediante el botón de navegación, será añadido a la lista de archivos de Resumable.js para subirse cuando se haga click en el botón de subida.

Para el lado del servidor, realmente depende del lenguaje y del framework que estés utilizando. Resumable.js no sólo requiere un endpoint al que subir los fragmentos del archivo, sino también un endpoint que pueda responder si un fragmento en particular ya se ha subido (para poder reanudar las subidas).

Te recomendaría que estudies detenidamente la documentación de Resumable.js y tal vez busques un tutorial específico para tu lenguaje de servidor y tu entorno.
 
Crear un código específico sería muy extenso y dependiente de tu entorno. Sin embargo, aquí te proporciono un ejemplo sencillo de cómo inicializar Resumable.js y cómo podrías manejar los eventos en el lado del cliente:

HTML:
HTML:
<input type="file" id="browseButton">
<button id="uploadButton">Subir</button>

JavaScript:
JavaScript:
var r = new Resumable({
  target: '/upload_endpoint',
  chunkSize: 1*1024*1024,
  simultaneousUploads: 3,
  testChunks: true,
  throttleProgressCallbacks: 1,
});

r.assignBrowse(document.getElementById('browseButton'));

document.getElementById('uploadButton').addEventListener('click', function(){
  if (r.files.length > 0){
    r.upload();
  }
});

r.on('fileSuccess', function(file){
  console.log('Subida completa');
});

Este código asigna un botón de navegación y subida. Cuando un archivo se selecciona mediante el botón de navegación, será añadido a la lista de archivos de Resumable.js para subirse cuando se haga click en el botón de subida.

Para el lado del servidor, realmente depende del lenguaje y del framework que estés utilizando. Resumable.js no sólo requiere un endpoint al que subir los fragmentos del archivo, sino también un endpoint que pueda responder si un fragmento en particular ya se ha subido (para poder reanudar las subidas).

Te recomendaría que estudies detenidamente la documentación de Resumable.js y tal vez busques un tutorial específico para tu lenguaje de servidor y tu entorno.
yo tengo este pero nose si tengo un error, porque cuando subo algunos videos se quedan como si estuvieran mal codificados o no se subieron bien, no lo se..


<section class="bluegold">
<div id="dropTarget">Arrastra y suelta los archivos aquí</div>
<button id="browseButton">Seleccionar archivos</button>
<div class="barra"><div class="barra_azul" id="barra_estado"><span></span></div></div>
<div id="mbRemaining">MB restantes: N/A</div>
</section>


<script>
function sunep(){
if(!document.querySelector('.plants')){
var texto = document.getElementsByClassName("nameip")[0].value;
var descrip = document.getElementsByClassName("descrip")[0].value;
var regex = /^[^áéíóúüÁÉÍÓÚÜ"'`]+$/; // No permite tildes, comillas simples ni dobles.
if(texto && descrip) {
if(regex.test(texto) && regex.test(descrip)) {
document.getElementById("merum").submit();
} else {
migrate("caracteres invalidos (tildes o comillas)");
}
}else{
migrate("Objeto vacio");
}
}
}
var r = new Resumable({
target:'uploadpro.php',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks:false,
throttleProgressCallbacks:1,
maxFileSize: 500*1024*1024, // Set maximum file size to 250MB
});

r.assignDrop(document.getElementById('dropTarget'));
r.assignBrowse(document.getElementById('browseButton'));

r.on('fileAdded', function(file) {
var fileType = file.file.type;
if (fileType.indexOf('mp4') === -1) {
if(!document.querySelector('.plants')){
migrate("solo archivos .mp4");
}
r.removeFile(file);
return;
}

if(file.size > r.getOpt('maxFileSize')) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("Tamaño maximo 500MB!");
}
return;
} else if (r.files.length > 1) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("1 archivo a la vez!");
}
return;
}
r.upload();
});

r.on('uploadStart', function() {
document.getElementById('mbRemaining').textContent = 'MB restantes: calculando...';
});

r.on('progress', function() {
var progress = r.progress() * 100;
document.getElementById('barra_estado').style.width = progress + '%';
document.getElementsByClassName("bluegold")[0].style.pointerEvents = "none";
var remainingSize = r.getSize() - r.progress() * r.getSize();
document.getElementById('mbRemaining').textContent = 'MB restantes: ' + (remainingSize / (1024 * 1024)).toFixed(2);
});

r.on('fileSuccess', function(file, message) {
console.log('Archivo cargado correctamente', file, message);
document.getElementById("merum").style.display = "block";
document.getElementsByClassName("bluegold")[0].style.display = "none";
document.getElementById('barra_estado').style.backgroundColor = 'green';
});

r.on('fileError', function(file, message) {
console.log('Error al cargar el archivo', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'red';
});
</script>
 
yo tengo este pero nose si tengo un error, porque cuando subo algunos videos se quedan como si estuvieran mal codificados o no se subieron bien, no lo se..


<section class="bluegold">
<div id="dropTarget">Arrastra y suelta los archivos aquí</div>
<button id="browseButton">Seleccionar archivos</button>
<div class="barra"><div class="barra_azul" id="barra_estado"><span></span></div></div>
<div id="mbRemaining">MB restantes: N/A</div>
</section>


<script>
function sunep(){
if(!document.querySelector('.plants')){
var texto = document.getElementsByClassName("nameip")[0].value;
var descrip = document.getElementsByClassName("descrip")[0].value;
var regex = /^[^áéíóúüÁÉÍÓÚÜ"'`]+$/; // No permite tildes, comillas simples ni dobles.
if(texto && descrip) {
if(regex.test(texto) && regex.test(descrip)) {
document.getElementById("merum").submit();
} else {
migrate("caracteres invalidos (tildes o comillas)");
}
}else{
migrate("Objeto vacio");
}
}
}
var r = new Resumable({
target:'uploadpro.php',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks:false,
throttleProgressCallbacks:1,
maxFileSize: 500*1024*1024, // Set maximum file size to 250MB
});

r.assignDrop(document.getElementById('dropTarget'));
r.assignBrowse(document.getElementById('browseButton'));

r.on('fileAdded', function(file) {
var fileType = file.file.type;
if (fileType.indexOf('mp4') === -1) {
if(!document.querySelector('.plants')){
migrate("solo archivos .mp4");
}
r.removeFile(file);
return;
}

if(file.size > r.getOpt('maxFileSize')) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("Tamaño maximo 500MB!");
}
return;
} else if (r.files.length > 1) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("1 archivo a la vez!");
}
return;
}
r.upload();
});

r.on('uploadStart', function() {
document.getElementById('mbRemaining').textContent = 'MB restantes: calculando...';
});

r.on('progress', function() {
var progress = r.progress() * 100;
document.getElementById('barra_estado').style.width = progress + '%';
document.getElementsByClassName("bluegold")[0].style.pointerEvents = "none";
var remainingSize = r.getSize() - r.progress() * r.getSize();
document.getElementById('mbRemaining').textContent = 'MB restantes: ' + (remainingSize / (1024 * 1024)).toFixed(2);
});

r.on('fileSuccess', function(file, message) {
console.log('Archivo cargado correctamente', file, message);
document.getElementById("merum").style.display = "block";
document.getElementsByClassName("bluegold")[0].style.display = "none";
document.getElementById('barra_estado').style.backgroundColor = 'green';
});

r.on('fileError', function(file, message) {
console.log('Error al cargar el archivo', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'red';
});
</script>
Tu código parece estar bastante bien organizado y no veo ningún error obvio en la lógica de la parte del cliente. Sin embargo, si algunos videos no se suben correctamente o parecen estar mal codificados, podría haber algo mal en la forma en que tu servidor maneja y procesa los fragmentos del archivo.

La parte del servidor para esto es muy específica y compleja. Aquí hay unos puntos a considerar:

1. ¿Estás manejando correctamente las solicitudes multipart/form-data en el servidor?
2. ¿Estás guardando los fragmentos ordenadamente y puedes unirlos correctamente?
3. ¿Verificas que todos los fragmentos se hayan subido antes de unirlos?
4. ¿Eliminas los fragmentos una vez que se completó la subida del archivo?

Además, ¿estás seguro de que los archivos de video que se están subiendo son válidos y no están corruptos desde el principio?

Finalmente, te sugeriría implementar más captura de errores y logging tanto en el lado del cliente como en el servidor. Eso podría ayudarte a identificar dónde está exactamente el problema.
 
Tu código parece estar bastante bien organizado y no veo ningún error obvio en la lógica de la parte del cliente. Sin embargo, si algunos videos no se suben correctamente o parecen estar mal codificados, podría haber algo mal en la forma en que tu servidor maneja y procesa los fragmentos del archivo.

La parte del servidor para esto es muy específica y compleja. Aquí hay unos puntos a considerar:

1. ¿Estás manejando correctamente las solicitudes multipart/form-data en el servidor?
2. ¿Estás guardando los fragmentos ordenadamente y puedes unirlos correctamente?
3. ¿Verificas que todos los fragmentos se hayan subido antes de unirlos?
4. ¿Eliminas los fragmentos una vez que se completó la subida del archivo?

Además, ¿estás seguro de que los archivos de video que se están subiendo son válidos y no están corruptos desde el principio?

Finalmente, te sugeriría implementar más captura de errores y logging tanto en el lado del cliente como en el servidor. Eso podría ayudarte a identificar dónde está exactamente el problema.
creo que si.. de todos modos miralo tu mismo y me avisas

<?php
if(session_status() == PHP_SESSION_NONE){
session_start();
}
error_reporting(0);
require_once('database.php');
if(!($conexion = mysqli_connect("".$hostdb."", "".$usuariodb."", "".$passworddb."")));
mysqli_select_db($conexion,"".$databasedb."");
if(!empty($_FILES)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){

$temp_archivo = $_FILES['file']['tmp_name'];

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'];

if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else {
$peso = filesize($temp_archivo) / 1024 / 1024;
$peso = round($peso, 2);
$mochie = mysqli_query($conexion,"SELECT * FROM watch");
$koods = mysqli_num_rows($mochie)+1;
$fornier = bin2hex(random_bytes(mt_rand(4,10)));

$mocheauss = mysqli_query($conexion,"SELECT MAX(hora) AS hora FROM watch limit 0,1");
$guyears = mysqli_fetch_assoc($mocheauss);
$horato=$guyears['hora']+1;

$query_exitosa = mysqli_query($conexion,"INSERT INTO watch(hora,fecha,waiting,get_id,target,peso,hored,email,newmodevideo) VALUES ('".$horato."','".date('d M Y')."','".mt_rand(1,8).bin2hex(random_bytes(mt_rand(6,10)))."','".mt_rand(1,5).bin2hex(random_bytes(mt_rand(3,10)))."','".mt_rand(1,10).bin2hex(random_bytes(mt_rand(5,10)))."','".$peso."','".date("Y-m-d H:i:s",strtotime($fecha_actual."+ 72 hours"))."','".$_SESSION['email']."','".$ruta_destino."')");
$archivo_movido = move_uploaded_file($temp_archivo, $ruta_destino);

$resultada = mysqli_query($conexion, "SELECT MAX(id) AS max_id FROM watch WHERE email='".$_SESSION['email']."'");
$fiyi = mysqli_fetch_assoc($resultada);
$ultimo_id = $fiyi['max_id'];

if($archivo_movido && $query_exitosa) {
mysqli_query($conexion,"UPDATE watch SET posis='exito' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
} else {
if(!$archivo_movido){
mysqli_query($conexion,"UPDATE watch SET posis='error al mover archivo' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
}
if(!$query_exitosa){
mysqli_query($conexion,"UPDATE watch SET posis='error de consulta' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
}
}
}

if (isset($_POST['resumableChunkNumber']) && isset($_POST['resumableTotalChunks'])) {
$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']);

if ($esUltimoFragmento) {
unset($_SESSION['ruta_destino']);
$resultadas = mysqli_query($conexion, "SELECT MAX(id) AS max_id FROM watch WHERE email='".$_SESSION['email']."'");
$fiyis = mysqli_fetch_assoc($resultadas);
$ultimo_ids = $fiyis['max_id'];
mysqli_query($conexion,"UPDATE watch SET terminates='yess' WHERE terminates='noo' and email='".$_SESSION['email']."' and id='".$ultimo_ids."'");
}
}
}
}
?>
 
creo que si.. de todos modos miralo tu mismo y me avisas

<?php
if(session_status() == PHP_SESSION_NONE){
session_start();
}
error_reporting(0);
require_once('database.php');
if(!($conexion = mysqli_connect("".$hostdb."", "".$usuariodb."", "".$passworddb."")));
mysqli_select_db($conexion,"".$databasedb."");
if(!empty($_FILES)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){

$temp_archivo = $_FILES['file']['tmp_name'];

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'];

if (file_exists($ruta_destino)) {
file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
} else {
$peso = filesize($temp_archivo) / 1024 / 1024;
$peso = round($peso, 2);
$mochie = mysqli_query($conexion,"SELECT * FROM watch");
$koods = mysqli_num_rows($mochie)+1;
$fornier = bin2hex(random_bytes(mt_rand(4,10)));

$mocheauss = mysqli_query($conexion,"SELECT MAX(hora) AS hora FROM watch limit 0,1");
$guyears = mysqli_fetch_assoc($mocheauss);
$horato=$guyears['hora']+1;

$query_exitosa = mysqli_query($conexion,"INSERT INTO watch(hora,fecha,waiting,get_id,target,peso,hored,email,newmodevideo) VALUES ('".$horato."','".date('d M Y')."','".mt_rand(1,8).bin2hex(random_bytes(mt_rand(6,10)))."','".mt_rand(1,5).bin2hex(random_bytes(mt_rand(3,10)))."','".mt_rand(1,10).bin2hex(random_bytes(mt_rand(5,10)))."','".$peso."','".date("Y-m-d H:i:s",strtotime($fecha_actual."+ 72 hours"))."','".$_SESSION['email']."','".$ruta_destino."')");
$archivo_movido = move_uploaded_file($temp_archivo, $ruta_destino);

$resultada = mysqli_query($conexion, "SELECT MAX(id) AS max_id FROM watch WHERE email='".$_SESSION['email']."'");
$fiyi = mysqli_fetch_assoc($resultada);
$ultimo_id = $fiyi['max_id'];

if($archivo_movido && $query_exitosa) {
mysqli_query($conexion,"UPDATE watch SET posis='exito' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
} else {
if(!$archivo_movido){
mysqli_query($conexion,"UPDATE watch SET posis='error al mover archivo' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
}
if(!$query_exitosa){
mysqli_query($conexion,"UPDATE watch SET posis='error de consulta' WHERE email='".$_SESSION['email']."' and id='".$ultimo_id."'");
}
}
}

if (isset($_POST['resumableChunkNumber']) && isset($_POST['resumableTotalChunks'])) {
$esUltimoFragmento = ($_POST['resumableChunkNumber'] == $_POST['resumableTotalChunks']);

if ($esUltimoFragmento) {
unset($_SESSION['ruta_destino']);
$resultadas = mysqli_query($conexion, "SELECT MAX(id) AS max_id FROM watch WHERE email='".$_SESSION['email']."'");
$fiyis = mysqli_fetch_assoc($resultadas);
$ultimo_ids = $fiyis['max_id'];
mysqli_query($conexion,"UPDATE watch SET terminates='yess' WHERE terminates='noo' and email='".$_SESSION['email']."' and id='".$ultimo_ids."'");
}
}
}
}
?>
Tu código de servidor parece bien estructurado y bastante sólido. Sin embargo, hay una cosa que vale la pena mencionar: la forma en que estás anexando a los archivos de video podría ser la causa de los problemas que estás experimentando.

Usas la función file_put_contents con la bandera FILE_APPEND para anexar cada chunk que llega al archivo de destino. Esto debería funcionar en teoría, pero si un chunk llega fuera de secuencia por alguna razón, lo anexarás en el orden equivocado, lo que podría causar un archivo de video dañado.

Aquí, las partes relevantes de tu código:
PHP:
$ruta_destino = $_SESSION['ruta_destino']; 
...
if (file_exists($ruta_destino)) {
    file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
...
}

Para solucionar esto, puedes modificar tu código para asegurarte de que los chunks se anexen en el orden correcto. Resumable.js envía el número de chunk actual y el total de chunks en cada petición al servidor. Puedes utilizar esa información para manejar los chunks de manera adecuada.

Aparte de eso, tu código se ve bien. Si continúas experimentando errores, recomendaría revisar tu configuración de servidor y asegurarte de que tu servidor puede manejar la carga de estos archivos grandes. En particular, verificaría cosas como upload_max_filesize, post_max_size y max_execution_time en tu configuración de PHP.
 
Tu código de servidor parece bien estructurado y bastante sólido. Sin embargo, hay una cosa que vale la pena mencionar: la forma en que estás anexando a los archivos de video podría ser la causa de los problemas que estás experimentando.

Usas la función file_put_contents con la bandera FILE_APPEND para anexar cada chunk que llega al archivo de destino. Esto debería funcionar en teoría, pero si un chunk llega fuera de secuencia por alguna razón, lo anexarás en el orden equivocado, lo que podría causar un archivo de video dañado.

Aquí, las partes relevantes de tu código:
PHP:
$ruta_destino = $_SESSION['ruta_destino'];
...
if (file_exists($ruta_destino)) {
    file_put_contents($ruta_destino, file_get_contents($temp_archivo), FILE_APPEND);
...
}

Para solucionar esto, puedes modificar tu código para asegurarte de que los chunks se anexen en el orden correcto. Resumable.js envía el número de chunk actual y el total de chunks en cada petición al servidor. Puedes utilizar esa información para manejar los chunks de manera adecuada.

Aparte de eso, tu código se ve bien. Si continúas experimentando errores, recomendaría revisar tu configuración de servidor y asegurarte de que tu servidor puede manejar la carga de estos archivos grandes. En particular, verificaría cosas como upload_max_filesize, post_max_size y max_execution_time en tu configuración de PHP.
no entendi nada, podrias darme el codigo completo porfa
 
no entendi nada, podrias darme el codigo completo porfa
Lo siento por la confusión anterior, pero proporcionar un código completo es complicado debido a que depende de muchos factores específicos de tu configuración y entorno.

Dicho esto, el cambio principal que estás buscando implicaría asegurarte de que estás anexando los fragmentos en el orden correcto. Puede que necesites reajustar tu enfoque para no depender de la función file_put_contents con la bandera FILE_APPEND, ya que esto simplemente anexará los fragmentos al final del archivo, independientemente del orden en que lleguen.

Como alternativa, podrías crear un directorio temporal para cada subida y guardar cada fragmento como un archivo separado en ese directorio. Entonces, una vez que todos los fragmentos hayan llegado, puedes combinarlos en el orden correcto para producir el archivo final.

Este enfoque requeriría una reescritura significativa de tu código de manejo de subidas y probablemente requeriría un ajuste adicional para encajar correctamente en tu aplicación. Te recomendaría que busques el asesoramiento de un desarrollador experimentado o, si te sientes cómodo con PHP y el manejo de ficheros, mira la documentación oficial de PHP y algunos tutoriales en línea para entender cómo puedes implementarlo correctamente.

Si experimentas problemas con la codificación y descodificación del video después de subirlo, también puede ser útil revisar tu proceso de manejo del video después de que se ha subido. Dependiendo de cómo estés procesando o sirviendo esos archivos de video, puede ser necesario ajustarlo para trabajar correctamente con los nuevos archivos de video creados.
 
Lo siento por la confusión anterior, pero proporcionar un código completo es complicado debido a que depende de muchos factores específicos de tu configuración y entorno.

Dicho esto, el cambio principal que estás buscando implicaría asegurarte de que estás anexando los fragmentos en el orden correcto. Puede que necesites reajustar tu enfoque para no depender de la función file_put_contents con la bandera FILE_APPEND, ya que esto simplemente anexará los fragmentos al final del archivo, independientemente del orden en que lleguen.

Como alternativa, podrías crear un directorio temporal para cada subida y guardar cada fragmento como un archivo separado en ese directorio. Entonces, una vez que todos los fragmentos hayan llegado, puedes combinarlos en el orden correcto para producir el archivo final.

Este enfoque requeriría una reescritura significativa de tu código de manejo de subidas y probablemente requeriría un ajuste adicional para encajar correctamente en tu aplicación. Te recomendaría que busques el asesoramiento de un desarrollador experimentado o, si te sientes cómodo con PHP y el manejo de ficheros, mira la documentación oficial de PHP y algunos tutoriales en línea para entender cómo puedes implementarlo correctamente.

Si experimentas problemas con la codificación y descodificación del video después de subirlo, también puede ser útil revisar tu proceso de manejo del video después de que se ha subido. Dependiendo de cómo estés procesando o sirviendo esos archivos de video, puede ser necesario ajustarlo para trabajar correctamente con los nuevos archivos de video creados.
mmm vale lo que me estas diciendo es que al juntarlos todos de una vez probablemente haya un error y entonces es mejor subirlos todos por separados?
 
mmm vale lo que me estas diciendo es que al juntarlos todos de una vez probablemente haya un error y entonces es mejor subirlos todos por separados?
En resumen, sí. El problema con la concatenación de los fragmentos del archivo tal como llegan es que no tienes garantía de que llegarán al servidor en el orden correcto. Si un fragmento llega fuera de orden y lo anexas de todos modos, el archivo resultante estará dañado porque los fragmentos no están en el orden correcto.

Así que una solución podría ser guardar cada fragmento en un archivo separado. Luego, una vez que todos los fragmentos han llegado, puedes juntarlos en el orden correcto para formar el archivo completo. Esto te garantiza que, sin importar el orden en que lleguen los fragmentos, el archivo final siempre estará correcto.

Por favor recuerda que esto es solo una idea general. Necesitarás ajustar esta idea para que funcione en tu entorno y con tu código específico. La implementación exacta puede ser bastante compleja y requiere un buen entendimiento de PHP y el manejo de archivos en el servidor.
 
En resumen, sí. El problema con la concatenación de los fragmentos del archivo tal como llegan es que no tienes garantía de que llegarán al servidor en el orden correcto. Si un fragmento llega fuera de orden y lo anexas de todos modos, el archivo resultante estará dañado porque los fragmentos no están en el orden correcto.

Así que una solución podría ser guardar cada fragmento en un archivo separado. Luego, una vez que todos los fragmentos han llegado, puedes juntarlos en el orden correcto para formar el archivo completo. Esto te garantiza que, sin importar el orden en que lleguen los fragmentos, el archivo final siempre estará correcto.

Por favor recuerda que esto es solo una idea general. Necesitarás ajustar esta idea para que funcione en tu entorno y con tu código específico. La implementación exacta puede ser bastante compleja y requiere un buen entendimiento de PHP y el manejo de archivos en el servidor.
pero una duda, si yo cambio esto
simultaneousUploads:4, por simultaneousUploads:1,

no evitaria ese problema y solucionaria mi error?
 
pero una duda, si yo cambio esto
simultaneousUploads:4, por simultaneousUploads:1,

no evitaria ese problema y solucionaria mi error?
Cambiar simultaneousUploads:4 a simultaneousUploads:1 podría ayudar a mitigar el problema, ya que enviaría los fragmentos uno a la vez en lugar de varios a la vez. Sin embargo, esto podría no garantizar completamente que los fragmentos lleguen al servidor exactamente en el orden en que fueron enviados, pues la latencia de la red y otros factores pueden afectar el orden de llegada.

Además, esto también hará que la subida sea más lenta, ya que estás limitando a que sólo se suba un fragmento a la vez.

El enfoque más seguro sería implementar un manejo en el servidor que pueda recibir los fragmentos en cualquier orden, almacenarlos, y luego combinarlos correctamente, como se explicó anteriormente. Esto garantizaría que los videos se procesen correctamente, independientemente del orden en que los fragmentos lleguen al servidor y sin ralentizar la subida.
 
Cambiar simultaneousUploads:4 a simultaneousUploads:1 podría ayudar a mitigar el problema, ya que enviaría los fragmentos uno a la vez en lugar de varios a la vez. Sin embargo, esto podría no garantizar completamente que los fragmentos lleguen al servidor exactamente en el orden en que fueron enviados, pues la latencia de la red y otros factores pueden afectar el orden de llegada.

Además, esto también hará que la subida sea más lenta, ya que estás limitando a que sólo se suba un fragmento a la vez.

El enfoque más seguro sería implementar un manejo en el servidor que pueda recibir los fragmentos en cualquier orden, almacenarlos, y luego combinarlos correctamente, como se explicó anteriormente. Esto garantizaría que los videos se procesen correctamente, independientemente del orden en que los fragmentos lleguen al servidor y sin ralentizar la subida.
vale, como hago esto?
 
vale, como hago esto?
Implementar un manejo de archivos fragmentados en el servidor requiere un buen entendimiento de PHP y del sistema de archivos del servidor. Aquí te proporciono un ejemplo simplificado de cómo podría verse:

1. Cuando un fragmento llega, en lugar de agregarlo al archivo de destino, lo guardas en un archivo separado en un directorio temporal. Puedes usar el número de fragmento que Resumable.js envía con cada petición para nombrar el archivo (por ejemplo, "fragmento1", "fragmento2", etc.).

PHP:
$temp_archivo = $_FILES['file']['tmp_name'];
$numero_fragmento = $_POST['resumableChunkNumber'];
file_put_contents("ruta/temporal/fragmento" . $numero_fragmento, file_get_contents($temp_archivo));

2. Cuando todos los fragmentos han sido subidos, los combinas en el orden correcto en el archivo final:

PHP:
$total_fragmentos = $_POST['resumableTotalChunks'];
for ($i = 1; $i <= $total_fragmentos; $i++) {
    $contenido_fragmento = file_get_contents("ruta/temporal/fragmento" . $i);
    file_put_contents($ruta_destino, $contenido_fragmento, FILE_APPEND);
}

3. Luego, puedes eliminar los archivos temporales:

PHP:
for ($i = 1; $i <= $total_fragmentos; $i++) {
    unlink("ruta/temporal/fragmento" . $i);
}

Esto es solo un ejemplo y probablemente necesites ajustarlo para que funcione en tu aplicación. Deberías ser consciente de comprobar la seguridad y la limpieza del código. En casos reales, debes manejar los errores y gestionar adecuadamente los permisos de archivos y directorios.
 
Implementar un manejo de archivos fragmentados en el servidor requiere un buen entendimiento de PHP y del sistema de archivos del servidor. Aquí te proporciono un ejemplo simplificado de cómo podría verse:

1. Cuando un fragmento llega, en lugar de agregarlo al archivo de destino, lo guardas en un archivo separado en un directorio temporal. Puedes usar el número de fragmento que Resumable.js envía con cada petición para nombrar el archivo (por ejemplo, "fragmento1", "fragmento2", etc.).

PHP:
$temp_archivo = $_FILES['file']['tmp_name'];
$numero_fragmento = $_POST['resumableChunkNumber'];
file_put_contents("ruta/temporal/fragmento" . $numero_fragmento, file_get_contents($temp_archivo));

2. Cuando todos los fragmentos han sido subidos, los combinas en el orden correcto en el archivo final:

PHP:
$total_fragmentos = $_POST['resumableTotalChunks'];
for ($i = 1; $i <= $total_fragmentos; $i++) {
    $contenido_fragmento = file_get_contents("ruta/temporal/fragmento" . $i);
    file_put_contents($ruta_destino, $contenido_fragmento, FILE_APPEND);
}

3. Luego, puedes eliminar los archivos temporales:

PHP:
for ($i = 1; $i <= $total_fragmentos; $i++) {
    unlink("ruta/temporal/fragmento" . $i);
}

Esto es solo un ejemplo y probablemente necesites ajustarlo para que funcione en tu aplicación. Deberías ser consciente de comprobar la seguridad y la limpieza del código. En casos reales, debes manejar los errores y gestionar adecuadamente los permisos de archivos y directorios.
Saludos Bot
 
Soy nuevo en el foro, Tienes idea de como poner mi firma es una imagen y al parecer no agarra bien
 
Soy nuevo en el foro, Tienes idea de como poner mi firma es una imagen y al parecer no agarra bien
¡Hola! Bienvenido al foro. Para añadir una imagen a tu firma, normalmente necesitas seguir estos pasos generales:

1. Sube tu imagen a un servicio de hosting de imágenes, como Imgur.
2. Copia el enlace directo a la imagen.
3. Ve a la configuración de tu perfil en el foro.
4. Busca la sección de la firma.
5. Usa el botón "Insertar imagen" (normalmente se ve como un pequeño icono de imagen) y pega el enlace que copiaste.

Ten en cuenta que cada foro puede tener reglas y formatos específicos, así que asegúrate de leer cualquier guía o FAQ disponible. Si sigues teniendo problemas, podría ser útil proporcionar más detalles sobre exactamente qué es lo que no está funcionando.
 
¡Hola! Bienvenido al foro. Para añadir una imagen a tu firma, normalmente necesitas seguir estos pasos generales:

1. Sube tu imagen a un servicio de hosting de imágenes, como Imgur.
2. Copia el enlace directo a la imagen.
3. Ve a la configuración de tu perfil en el foro.
4. Busca la sección de la firma.
5. Usa el botón "Insertar imagen" (normalmente se ve como un pequeño icono de imagen) y pega el enlace que copiaste.

Ten en cuenta que cada foro puede tener reglas y formatos específicos, así que asegúrate de leer cualquier guía o FAQ disponible. Si sigues teniendo problemas, podría ser útil proporcionar más detalles sobre exactamente qué es lo que no está funcionando.
eh gracias
 
Atrás
Arriba