SWFUploadEs un complemento de carga de archivos que combina Flash y JS, y sus funciones son muy potentes. Lo he usado varias veces en proyectos anteriormente, pero tiene demasiados parámetros de configuración; después de usarlo olvido cómo se usa, y cuando lo necesito más tarde tengo que ir al sitio web oficial a consultar su documentación, lo cual es muy molesto. Así que decidí registrar su uso, también para facilitar la consulta a los compañeros con mal inglés; beneficia a otros y a mí mismo, y es un esfuerzo de una vez para siempre.
Características de SWFUpload
- 1. Utiliza Flash para la carga, la página no se actualiza, y se puede personalizar el estilo del botón de Flash;
- 2. Se pueden aplicar restricciones a los archivos que se van a subir directamente en el lado del navegador;
- 3. Permite subir varios archivos a la vez, pero hay una cola de carga, y la subida de los archivos en la cola se realiza uno por uno; cuando el servidor recibe los archivos, es igual que la carga de archivos mediante un formulario normal;
- 4. Proporciona una gran variedad de interfaces de eventos para que los desarrolladores las utilicen;
Flujo de carga de archivos de SWFUpload:
- 1. Introducir el archivo JS correspondiente.
- 2. Instanciar el objeto SWFUpload, pasando un objeto de parámetros de configuración para realizar diversas configuraciones.
- 3. Hacer clic en el botón Flash proporcionado por SWFUpload; se abre la ventana de selección de archivos para elegir los archivos a subir;
- 4. Una vez completada la selección de archivos, los archivos que cumplan los requisitos se añaden a la cola de carga;
- 5. Llamar al método startUpload para que los archivos en la cola comiencen a subirse;
- 6. Durante el proceso de carga de archivos se activan los eventos correspondientes; los desarrolladores utilizan estos eventos para actualizar la interfaz de usuario, manejar errores, mostrar avisos, etc.;
SWFUpload incluye tres partes: SWFUpload.js, swfupload.swf, parámetros de configuración de inicialización y varias funciones de manejo de eventos. Por lo tanto, primero se introduce SWFUpload.js en la página.
<script src='SWFUpload.js.html'></script>
Luego se instancia un objeto SWFUpload:
var swfu;
window.onload = function () {
var settings_object = {//定义参数配置对象
upload_url : "http://www.swfupload.org/upload.php",
flash_url : "http://www.swfupload.org/swfupload.swf",
file_post_name : "Filedata",
post_params : {
"post_param_name_1" : "post_param_value_1",
"post_param_name_2" : "post_param_value_2",
"post_param_name_n" : "post_param_value_n"
},
use_query_string : false,
requeue_on_error : false,
http_success : [201, 202],
assume_success_timeout : 0,
file_types : "*.jpg;*.gif",
file_types_description: "Web Image Files",
file_size_limit : "1024",
file_upload_limit : 10,
file_queue_limit : 2,
debug : false,
prevent_swf_caching : false,
preserve_relative_urls : false,
button_placeholder_id : "element_id",
button_image_url : "http://www.swfupload.org/button_sprite.png",
button_width : 61,
button_height : 22,
button_text : "<b>Click</b> <span class="redText">here</span>",
button_text_style : ".redText { color: #FF0000; }",
button_text_left_padding : 3,
button_text_top_padding : 2,
button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
button_disabled : false,
button_cursor : SWFUpload.CURSOR.HAND,
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
swfupload_loaded_handler : swfupload_loaded_function,
file_dialog_start_handler : file_dialog_start_function,
file_queued_handler : file_queued_function,
file_queue_error_handler : file_queue_error_function,
file_dialog_complete_handler : file_dialog_complete_function,
upload_start_handler : upload_start_function,
upload_progress_handler : upload_progress_function,
upload_error_handler : upload_error_function,
upload_success_handler : upload_success_function,
upload_complete_handler : upload_complete_function,
debug_handler : debug_function,
};
swfu = new SWFUpload(settings_object);//实例化一个SWFUpload,传入参数配置对象
};
/*定义各种事件监听函数*/
function swfupload_loaded_function(){}
function file_dialog_start_function(){}
...等等
Vemos que implementar una función de carga con swfupload es muy sencillo: solo hay que instanciar un objeto swfupload. Pero lo engorroso está en el objeto de configuración de parámetros que se usa al instanciar, así como en el momento en que ocurren varios eventos y los parámetros que proporcionan. Así que aquí viene lo importante. Las siguientes tablas enumeran las cosas que se usan en el desarrollo; aunque ya son bastantes, no son todo swfupload; solo he enumerado las más comunes. Para ver la documentación completa, consulte el sitio web oficial de swfupload.
Propiedades comunes y descripciones en el objeto de parámetros de configuración de swfupload
| Propiedad | Tipo | Valor predeterminado | Descripción |
| upload_url | String | La URL de la página del lado del servidor que procesa el archivo subido; puede ser una dirección absoluta o relativa. Cuando es relativa, la referencia es la dirección del documento donde se encuentra el código actual. | |
| preserve_relative_urls | Boolean | false | Si es false, SWFUpload convertirá las direcciones relativas utilizadas por swfupload.swf en direcciones absolutas para lograr una mejor compatibilidad. |
| file_post_name | String | Filedata | Equivale al atributo name al subir archivos con un campo de archivo normal. La página receptora del servidor utiliza este nombre para obtener el archivo subido. |
| post_params | Object (literal) | Un literal de objeto; los pares clave/valor que contiene se suben junto con cada archivo. Es muy útil cuando es necesario adjuntar información adicional a la carga de archivos. | |
| use_query_string | Boolean | false | Cuando es false, los parámetros definidos en la propiedad post_params se suben mediante POST; cuando es true, se suben mediante GET (es decir, los parámetros se añaden a la URL como una cadena de consulta). |
| file_types | String | Esta propiedad especifica los tipos de archivo permitidos para la carga. Cuando hay varios tipos, sepárelos con punto y coma, por ejemplo: *.jpg;*.png. Para permitir todos los tipos, use *.* | |
| file_types_description | String | Especifica la descripción del tipo de archivo que se muestra en la ventana de selección de archivos; sirve como aviso y explicación. | |
| file_size_limit | String | Especifica el tamaño máximo del archivo a subir. Puede llevar unidad; las unidades válidas son: B, KB, MB, GB. Si se omite la unidad, el valor predeterminado es KB. Cuando esta propiedad es 0, significa que no se limita el tamaño del archivo. | |
| file_upload_limit | Number | Especifica el número máximo de archivos que se pueden subir. Cuando la cantidad de archivos subidos con éxito alcanza este máximo, ya no se pueden subir más archivos ni se pueden añadir archivos a la cola de carga. Establecer esta propiedad en 0 significa que no se limita la cantidad de archivos a subir. | |
| file_queue_limit | Number | Especifica el número máximo de archivos que pueden estar simultáneamente en la cola de carga. Si se supera este número, solo después de que algunos archivos de la cola se suban con éxito, den error o se cancelen, se podrán añadir otros archivos en la misma cantidad. Cuando el valor de file_upload_limit o el número restante de archivos que se pueden subir es menor que file_queue_limit, se toma el valor más pequeño. | |
| flash_url | String | La dirección absoluta o relativa del archivo swfupload.swf; la dirección relativa se refiere a la dirección de la página actual. Una vez instanciado swfupload, el valor de esta propiedad ya no se puede cambiar. | |
| prevent_swf_caching | Boolean | Cuando es true, se añade un número aleatorio al final de la dirección de swfupload.swf para evitar que la película Flash se almacene en caché. Esto se hace para prevenir el error que ocurre en ciertas versiones del navegador IE al leer películas Flash en caché. | |
| button_placeholder_id | String | Especifica el id de un elemento DOM. Este elemento DOM será reemplazado por el botón Flash después de instanciar swfupload; este elemento DOM actúa como un marcador de posición. | |
| button_placeholder | DOMElement | Especifica un elemento DOM. Este elemento DOM será reemplazado por el botón Flash después de instanciar swfupload; este elemento DOM actúa como un marcador de posición. Cuando existen tanto button_placeholder_id como button_placeholder, button_placeholder_id tiene prioridad. | |
| button_image_url | String | Especifica la imagen de fondo del botón Flash; puede ser una dirección relativa o absoluta. Esta dirección se ve afectada por la propiedad preserve_relative_urls y sigue las mismas reglas que upload_url. La imagen de fondo debe ser una imagen sprite; de arriba a abajo contiene los cuatro estados del botón Flash: normal, hover del ratón, presionado y deshabilitado. Por lo tanto, la altura de la imagen debe ser cuatro veces la altura del botón Flash. | |
| button_width | Number | Especifica el ancho del botón Flash. | |
| button_height | Number | Especifica la altura del botón Flash; debe ser 1/4 de la altura de la imagen de fondo del botón especificada por button_image_url. | |
| button_text | String | Especifica el texto del botón Flash; también puede ser código HTML. | |
| button_text_style | String | El estilo del texto en el botón Flash; consulte el ejemplo para saber cómo usarlo. | |
| button_text_top_padding | Number | Especifica el padding superior del botón Flash; se pueden usar valores negativos. | |
| button_text_left_padding | Number | Especifica el padding izquierdo del botón Flash; se pueden usar valores negativos. | |
| button_disabled | Boolean | false | Cuando es true, el botón Flash se vuelve estado deshabilitado y al hacer clic no se desencadena ninguna acción. |
| button_cursor | Especifica el estilo del cursor cuando el ratón se coloca sobre el botón Flash. Los valores disponibles son las constantes definidas en SWFUpload.CURSOR. | ||
| button_window_mode | Especifica el atributo WMODE del botón Flash. Los valores disponibles son las constantes definidas en SWFUpload.WINDOW_MODE. | ||
| file_dialog_start_handler | Function | Función de escucha del evento fileDialogStart | |
| file_queued_handler | Function | Función de escucha del evento fileQueued | |
| file_queue_error_handler | Function | Función de escucha del evento fileQueueError | |
| file_dialog_complete_handler | Function | Función de escucha del evento fileDialogComplete | |
| upload_start_handler | Function | Función de escucha del evento uploadStart | |
| upload_progress_handler | Function | Función de escucha del evento uploadProgress | |
| upload_error_handler | Function | Función de escucha del evento uploadError | |
| upload_success_handler | Function | Función de escucha del evento uploadSuccess | |
| upload_complete_handler | Function | Función de escucha del evento uploadComplete |
Explicación de varios eventos de SWFupload
| fileDialogStart ( ) | ||
| Se activa cuando la ventana de selección de archivos está a punto de mostrarse. | ||
| fileQueued ( file object ) | ||
| Cuando un archivo se añade a la cola de carga, se activa este evento. El único parámetro proporcionado es el objeto file object que contiene la información del archivo. | ||
| fileQueueError ( file object, error code, message ) | ||
| Este evento se activa cuando falla la adición de un archivo a la cola de carga. La causa del fallo puede ser que el tamaño del archivo supere el valor permitido, que el archivo esté vacío o que la cola de archivos ya esté llena, entre otras. Este evento proporciona tres parámetros. El primer parámetro es el objeto de archivo con el problema actual; el segundo parámetro es el código de error específico, que puede consultarse en las constantes definidas en SWFUpload.QUEUE_ERROR. | ||
| fileDialogComplete ( number of files selected, number of files queued, total number of files in the queued ) | ||
| Cuando se completa la selección de archivos y los archivos seleccionados han sido procesados (es decir, añadidos a la cola de carga), se activa este evento inmediatamente. En este evento se puede llamar al método this.startUpload() para lograr la carga automática de archivos. El parámetro number of files selected se refiere al número de archivos seleccionados en esta ocasión en el cuadro de selección de archivos. El parámetro number of files queued se refiere al número de archivos que se añadieron a la cola de carga en esta ocasión. El parámetro total number of files in the queued se refiere a cuántos archivos hay actualmente en la cola de carga (incluidos los archivos añadidos en esta ocasión). | ||
| uploadStart ( file object ) | ||
| Este evento se activa cuando el archivo está a punto de subirse; le brinda la última oportunidad antes de la carga para validar la información del archivo, agregar información adicional que se subirá junto con él o realizar otras tareas. Se puede cancelar la carga de este archivo devolviendo false. El parámetro file object es el objeto de información del archivo que se va a cargar actualmente. | ||
| uploadProgress ( file object, bytes complete, total bytes ) | ||
| Este evento se dispara repetidamente durante el proceso de carga del archivo, y se puede aprovechar para implementar una barra de progreso de carga. El parámetro file object es el objeto de información del archivo. El parámetro bytes complete es el número de bytes que se han cargado actualmente. El parámetro total bytes es el número total de bytes del archivo. | ||
| uploadError ( file object, error code, message ) | ||
| Este evento se dispara cuando la carga del archivo se interrumpe o el archivo no se carga correctamente. Detener la carga, cancelarla o devolver false en el evento uploadStart provocará este evento; sin embargo, si un archivo se cancela pero aún permanece en la cola, no se disparará este evento. El parámetro file object es el objeto de información del archivo. El parámetro error code es el código de error; para más detalles, consulte las constantes definidas en SWFUpload.UPLOAD_ERROR. | ||
| uploadSuccess ( file object, server data, received response ) | ||
| Este evento se dispara cuando un archivo se ha cargado correctamente. El parámetro file object es el objeto de información del archivo. El parámetro server data son los datos de salida del lado del servidor. | ||
| uploadComplete( file object ) | ||
| Este evento se dispara cuando se completa el proceso de carga de un archivo (sea exitoso o no). Indica que la carga actual ha finalizado y que el siguiente archivo de la cola puede comenzar a cargarse. Después de que ocurra este evento, comenzará la carga del siguiente archivo de la cola. |
Métodos de la instancia de swfupload
La mayoría de estos métodos sirven para modificar dinámicamente el objeto de configuración de parámetros.
| destroy ( ) | ||
| Cuando ya no necesite usar SWFUpload, puede utilizar este método para destruir su instancia y sus elementos DOM. | ||
| startUpload( file_id ) | ||
| Comienza a cargar el archivo especificado en la cola. El parámetro file_id representa el id del archivo a cargar. Si no se especifica este parámetro, se cargará el primer archivo de la cola. | ||
| cancelUpload ( file_id, trigger_error_event ) | ||
| Cancela la carga del archivo. El parámetro file_id es el id del archivo que se va a cancelar. Si este parámetro es undefined o no se especifica, se cancelará el primer archivo de la cola. El parámetro trigger_error_event acepta un valor booleano. Cuando es false, cancelar el archivo no disparará el evento uploadError. El valor predeterminado es true. | ||
| stopUpload ( ) | ||
| Termina el archivo que se está cargando actualmente y dispara el evento uploadError. Si no hay ningún archivo cargándose en ese momento, este método no hace nada. | ||
| getStats ( ) | ||
| Obtiene el objeto stats de la cola. | ||
| setStats ( stats_object ) | ||
| Modifica el stats_object de la cola; pase el stats_object modificado como parámetro. | ||
| getFile ( file_id|index ) | ||
| Permite obtener un File Object según el id del archivo o el índice del archivo. Al usar el id del archivo, solo se obtienen archivos de la cola; al usar el índice, se pueden obtener todos los archivos, incluidos los que están en la cola y los que no. | ||
| addPostParam ( name, value) | ||
| Agrega un par clave/valor al objeto de información adicional especificado por post_params en el objeto de configuración. | ||
| removePostParam ( name) | ||
| Elimina un par clave/valor contenido en post_params del objeto de configuración. El parámetro name es el nombre de la clave del valor que se va a eliminar. | ||
| addFileParam ( file_id, name, value) | ||
| Agrega información adicional que se cargará junto con un archivo específico. Tenga en cuenta que la información adicional solo se cargará cuando se cargue dicho archivo específico. La información adicional establecida en post_param en el objeto de configuración se enviará junto con cualquier archivo que se cargue. El parámetro file_id es el id del archivo especificado; los parámetros name y value son el nombre y el valor de la información adicional, respectivamente. | ||
| removeFileParam ( file_id, name) | ||
| Elimina la información adicional agregada mediante el método addFileParam. Supongo que no hace falta explicar los dos parámetros. | ||
| setUploadURL ( url) | ||
| Establece dinámicamente el valor de upload_url en el objeto de configuración. | ||
| setPostParams ( param_object) | ||
| Establece dinámicamente el valor de la propiedad post_params en el objeto de configuración. El nuevo valor sobrescribirá al anterior. El parámetro param_object debe ser un objeto literal, y tanto sus propiedades como sus valores solo pueden ser cadenas. | ||
| setFileTypes ( types, description) | ||
| Establece dinámicamente los valores de las propiedades file_types y file_types_description en el objeto de configuración. Ninguno de los dos parámetros puede omitirse. | ||
| setFileSizeLimit ( file_size_limit) | ||
| Establece dinámicamente el valor de la propiedad file_size_limit en el objeto de configuración. | ||
| setFileUploadLimit ( file_upload_limit) | ||
| Establece dinámicamente el valor de la propiedad file_upload_limit en el objeto de configuración. | ||
| setFileQueueLimit ( file_queue_limit) | ||
| Establece dinámicamente el valor de la propiedad file_queue_limit en el objeto de configuración. | ||
| setFilePostName ( file_post_name) | ||
| Establece dinámicamente el valor de la propiedad file_post_name en el objeto de configuración. | ||
| setUseQueryString ( use_query_string) | ||
| Establece dinámicamente el valor de la propiedad use_query_string en el objeto de configuración. | ||
| setButtonImageURL ( url) | ||
| Establece dinámicamente el valor de la propiedad button_image_url en el objeto de configuración. | ||
| setButtonDimensions ( width, height) | ||
| Establece dinámicamente el ancho y la altura del botón Flash. Los dos parámetros son los valores del ancho y la altura, de tipo numérico y sin unidades. | ||
| setButtonText ( text) | ||
| Establece dinámicamente el valor de la propiedad button_text en el objeto de configuración. | ||
| setButtonTextStyle ( css_style_text) | ||
| Establece dinámicamente el valor de la propiedad button_text_style en el objeto de configuración. | ||
| setButtonTextPadding ( left, top ) | ||
| Establece dinámicamente el relleno izquierdo y el relleno superior del botón Flash. | ||
| setButtonDisabled ( isDisabled ) | ||
| Habilita o deshabilita dinámicamente el botón Flash; el parámetro es un valor booleano. | ||
| setButtonCursor ( buttonCursor ) | ||
| Establece dinámicamente el valor de button_cursor en el objeto de configuración. |
Objeto de información de archivo File Object
En las funciones de escucha de eventos, a menudo se utiliza el objeto de información del archivo para obtener la información del archivo y continuar con las siguientes operaciones.
| Propiedad | Tipo | Descripción |
| id | String | El id de archivo definido por SWFUpload, utilizado para controlar la carga del archivo. |
| index | Number | Índice del archivo, utilizado en el método getFile(i). |
| name | String | Nombre original del archivo, sin incluir la ruta. |
| type | String | Tipo de archivo. |
| creationdate | Date | Fecha de creación del archivo. |
| modificationdate | Date | Fecha de última modificación del archivo. |
| filestatus | Number | Estado actual del archivo. Para más detalles, consulte las constantes definidas en SWFUpload.FILE_STATUS. |
Objeto de estado de la cola Stats Object
Se utiliza para obtener el estado actual de la cola.
| Propiedad | Tipo | Descripción |
| in_progress | Number | El valor obtenido es 1 o 0, e indica si hay algún archivo cargándose actualmente en la cola. |
| files_queued | Number | Número de archivos que hay actualmente en la cola de carga. |
| successful_uploads | Number | Número de archivos que se han cargado correctamente (es decir, que dispararon el evento uploadSuccess). |
| upload_errors | Number | Número de archivos que fallaron al cargarse, incluidos los archivos cuya carga fue cancelada. |
| upload_cancelled | Number | Número de archivos cuya carga fue cancelada. |
| queue_errors | Number | Número de archivos que dispararon el evento fileQueueError. |
Algunas constantes
Algunas constantes definidas por SWFUpload para facilitar la comprensión.
| Nombre de la constante | Descripción |
| SWFUpload.instances | Esta constante es un objeto que representa una colección de referencias a todas las instancias de SWFUpload en una página, indexadas mediante la propiedad movieName de la instancia de SWFUpload. |
| SWFUpload.movieCount | Número de instancias de SWFUpload existentes en la página. |
| SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED | El usuario seleccionó más archivos de los permitidos. |
| SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT | El tamaño del archivo supera el tamaño permitido. |
| SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE | El archivo está vacío. |
| SWFUpload.QUEUE_ERROR.INVALID_FILETYPE | Tipo de archivo no permitido. |
| SWFUpload.UPLOAD_ERROR.HTTP_ERROR | El código de estado devuelto por el servidor no es 200. |
| SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL | No se ha establecido upload_url. |
| SWFUpload.UPLOAD_ERROR.IO_ERROR | Se produjo un error al leer o transferir el archivo. |
| SWFUpload.UPLOAD_ERROR.SECURITY_ERROR | La carga fue restringida por limitaciones de seguridad. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED | El número de archivos cargados supera el máximo permitido. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED | Se produjo un error en la carga. |
| SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND | El id de archivo pasado al método startUpload() no existe. |
| SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED | Se devolvió false en el método uploadStart(). |
| SWFUpload.UPLOAD_ERROR.FILE_CANCELLED | La carga fue cancelada. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED | La carga fue terminada. |
| SWFUpload.FILE_STATUS.QUEUED | El archivo está en la cola esperando para cargarse. |
| SWFUpload.FILE_STATUS.IN_PROGRESS | El archivo se está cargando. |
| SWFUpload.FILE_STATUS.ERROR | Se produjo un error al añadir el archivo a la cola o al cargarlo. |
| SWFUpload.FILE_STATUS.COMPLETE | El archivo se cargó correctamente. |
| SWFUpload.FILE_STATUS. | Se canceló la carga del archivo. |
| SWFUpload.CURSOR.ARROW | El cursor del mouse se muestra como una flecha. |
| SWFUpload.CURSOR.HAND | El cursor del mouse se muestra como una mano. |
| SWFUpload.WINDOW_MODE.WINDOW | El botón Flash se mostrará por encima de todos los elementos DOM de la página. |
| SWFUpload.WINDOW_MODE.OPAQUE | Permite que otros elementos DOM cubran el botón Flash. |
| SWFUpload.WINDOW_MODE.TRANSPARENT | Permite que el botón Flash se muestre de forma transparente. |
Dirección de descarga
- URL de descarga de SWFUpload:https://code.google.com/p/swfupload/
- Documentación oficial de SWFUpload (versión 2.5.0):http://www.w3cschool.cc/w3cnote/swfupload-document.html