una subir sube servidor seleccionar para multiples guardarlos ejemplo con codigo carpeta archivos archivo php javascript file-upload image-uploading filesize

sube - subir archivos php mysql



Verifique el tamaƱo del archivo antes de cargarlo (3)

Estoy usando este javascript que obtuve de aquí, y funciona perfectamente para lo que necesito.

var _validFileExtensions = [".jpg", ".jpeg"]; function File_Validator(theForm){ var arrInputs = theForm.getElementsByTagName("input"); for (var i = 0; i < arrInputs.length; i++) { var oInput = arrInputs[i]; if (oInput.type == "file") { var sFileName = oInput.value; var blnValid = false; for (var j = 0; j < _validFileExtensions.length; j++) { var sCurExtension = _validFileExtensions[j]; if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) { blnValid = true; break; } } if (!blnValid) { alert("Invalid image file type!"); return false; } } } return true; }

Ahora, me preguntaba si, además, podría verificar el tamaño del archivo y fallar si el archivo es más grande que 500kb -> todo antes de presionar el botón enviar / cargar?

EDITAR

Después de analizar qué sugirió PHPMyCoder, termino resolviendo mediante el uso de este código de JavaScript:

<script language=''JavaScript''> function checkFileSize(inputFile) { var max = 3 * 512 * 512; // 786MB if (inputFile.files && inputFile.files[0].size > max) { alert("File too large."); // Do your thing to handle the error. inputFile.value = null; // Clear the field. } } </script>

Esto verifica el tamaño del archivo y alerta al usuario antes de enviar el formulario.


Lado de la carga del lado del cliente

En los navegadores modernos (FF> = 3.6, Chrome> = 19.0, Opera> = 12.0 y buggy en Safari), puede usar la API de archivos HTML5 . Cuando el valor de una entrada de archivo cambia, esta API le permitirá verificar si el tamaño del archivo está dentro de sus requisitos. Por supuesto, esto, al igual que MAX_FILE_SIZE , puede ser alterado, por lo tanto siempre use la validación del lado del servidor.

<form method="post" enctype="multipart/form-data" action="upload.php"> <input type="file" name="file" id="file" /> <input type="submit" name="submit" value="Submit" /> </form> <script> document.forms[0].addEventListener(''submit'', function( evt ) { var file = document.getElementById(''file'').files[0]; if(file && file.size < 10485760) { // 10 MB (this size is in bytes) //Submit form } else { //Prevent default and display error evt.preventDefault(); } }, false); </script>

Cancelación de carga del lado del servidor

En el lado del servidor, es imposible detener la carga de PHP, ya que una vez que se ha invocado PHP, la carga ya se ha completado. Si está tratando de ahorrar ancho de banda, puede denegar las cargas desde el servidor con la configuración ini upload_max_filesize . El problema con esto es que esto se aplica a todas las cargas, por lo que tendrás que elegir algo liberal que funcione para todas tus cargas. El uso de MAX_FILE_SIZE se ha discutido en otras respuestas. Sugiero leer el manual en él . Sepa que, junto con cualquier otra cosa del lado del cliente (incluida la verificación de javascript), se puede alterar, por lo que siempre debe tener la validación del lado del servidor (PHP).

Validación de PHP

En el lado del servidor, debe validar que el archivo está dentro de las restricciones de tamaño (porque todo hasta este punto, excepto la configuración INI, podría ser alterado). Puede usar la matriz $_FILES para averiguar el tamaño de carga. (Los documentos sobre el contenido de $_FILES se pueden encontrar debajo de los documentos MAX_FILE_SIZE )

upload.php

<?php if(isset($_FILES[''file'']) { if($_FILES[''file''][''size''] > 10485760) { //10 MB (size is also in bytes) // File too big } else { // File within size restrictions } }


Creé una versión jQuery de la respuesta de PhpMyCoder:

$(''form'').submit(function( e ) { if(!($(''#file'')[0].files[0].size < 10485760 && get_extension($(''#file'').val()) == ''jpg'')) { // 10 MB (this size is in bytes) //Prevent default and display error alert("File is wrong type or over 10Mb in size!"); e.preventDefault(); } }); function get_extension(filename) { return filename.split(''.'').pop().toLowerCase(); }


JavaScript que se ejecuta en un navegador generalmente no tiene acceso al sistema de archivos local. Eso está fuera de la caja de arena. Entonces creo que la respuesta es no.