Playlist TV: subir en cola con resumen — «subí 5 y solo salieron 2»
El reproductor no se saltaba nada: en la base solo había 2 videos. El defecto estaba en la subida: los archivos elegidos se mandaban TODOS EN PARALELO (inp.files.forEach), peleándose el ancho de banda de subida. Los primeros alcanzaban a entrar y el resto moría por timeout — avisando con un toast que desaparece en segundos y con una barra de progreso que además era la misma para todos, pisándose entre sí. El cliente veía «subí 5», la playlist tenía 2. Ahora los archivos van de a uno (secuencial a propósito), un fallo no frena a los que siguen, y al terminar queda un RESUMEN FIJO: «3 de 5 agregados», con el nombre de cada rechazado y su motivo en cristiano. Los videos de iPhone (.mov) —causa probable del resto de los faltantes— se rechazan de inmediato con la instrucción de convertirlos a MP4, en el navegador y en el servidor. Y los límites de PHP (INI_SIZE, FORM_SIZE, PARTIAL) dejan de caer en «error de subida desconocido». Verificado además que nginx acepta cuerpos de 90 MB o más: el límite del web server no era la causa. scripts/test_tv_playlist.js: 11 pruebas contra el código real — nunca dos subidas a la vez, los 5 se intentan pese a fallos, el resumen cuenta y nombra, y los pre-chequeos rechazan sin tocar la red. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1ba6805799
commit
587c23adcd
@@ -40,6 +40,11 @@ if ($file['error'] !== UPLOAD_ERR_OK) {
|
||||
UPLOAD_ERR_NO_FILE => 'No se seleccionó ningún archivo',
|
||||
UPLOAD_ERR_NO_TMP_DIR => 'Falta la carpeta temporal',
|
||||
UPLOAD_ERR_CANT_WRITE => 'Error al escribir el archivo',
|
||||
// Antes estos dos caían en «error desconocido», que no le dice nada a
|
||||
// quien sube: son los límites de PHP, no del código.
|
||||
UPLOAD_ERR_INI_SIZE => 'El archivo supera el límite de subida del servidor (php.ini)',
|
||||
UPLOAD_ERR_FORM_SIZE => 'El archivo supera el límite del formulario',
|
||||
UPLOAD_ERR_PARTIAL => 'La subida se cortó a medias: intente de nuevo',
|
||||
];
|
||||
echo json_encode(['ok' => false, 'error' => $errores[$file['error']] ?? 'Error de subida desconocido']);
|
||||
exit;
|
||||
@@ -63,7 +68,11 @@ $mimeMap = [
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
$mime = $finfo->file($file['tmp_name']);
|
||||
if (!isset($mimeMap[$mime])) {
|
||||
echo json_encode(['ok' => false, 'error' => 'Formato no admitido. Usa MP4, WebM, JPG, PNG o WEBP']);
|
||||
// El caso más común es el video de iPhone: merece su propio mensaje
|
||||
$msg = ($mime === 'video/quicktime')
|
||||
? 'Es un video de iPhone (.mov): conviértalo a MP4 antes de subirlo'
|
||||
: 'Formato no admitido (' . $mime . '). Use MP4, WebM, JPG, PNG o WEBP';
|
||||
echo json_encode(['ok' => false, 'error' => $msg]);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user