SWFUploadЭто плагин для загрузки файлов, объединяющий Flash и JavaScript, и его функциональность очень мощная. Раньше я несколько раз использовал его в проектах, но у него слишком много параметров конфигурации. После одного использования забываешь, как им пользоваться, и когда он снова нужен, приходится идти на официальный сайт читать документацию, что действительно раздражает. Поэтому я просто записал его использование, что также удобно для студентов со слабым английским для справки. Это приносит пользу и мне, и другим, и решает проблему раз и навсегда.
Возможности SWFUpload
- 1. Загрузка с помощью Flash, без обновления страницы, а стиль кнопки Flash можно настроить;
- 2. Файлы для загрузки можно ограничивать на стороне браузера;
- 3. Позволяет загружать несколько файлов сразу, но существует очередь загрузки. Файлы в очереди загружаются по одному. Серверная сторона принимает файлы так же, как при обычной загрузке файлов через форму;
- 4. Предоставляет разработчикам богатые интерфейсы событий;
Процесс загрузки файлов в SWFUpload:
- 1. Подключите соответствующий JS-файл
- 2. Создать экземпляр объекта SWFUpload, передав объект параметров конфигурации для различных настроек.
- 3. Нажмите кнопку Flash, предоставленную SWFUpload, и появится окно выбора файлов, где можно выбрать файлы для загрузки;
- 4. После выбора файлов файлы, соответствующие требованиям, будут добавлены в очередь загрузки;
- 5. Вызовите метод startUpload, чтобы начать загрузку файлов из очереди;
- 6. В процессе загрузки файла запускаются соответствующие события. Разработчики используют эти события для обновления интерфейса, обработки ошибок, показа подсказок и т. д.;
SWFUpload состоит из трёх частей: SWFUpload.js, swfupload.swf, параметры конфигурации инициализации и различные функции обработки событий. Поэтому сначала подключите SWFUpload.js на страницу
<script src='SWFUpload.js.html'></script>
Затем создайте экземпляр объекта 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(){}
...等等
Мы видим, что реализовать функцию загрузки SWFUpload очень просто: достаточно создать экземпляр объекта SWFUpload. Но сложность вызывает объект параметров конфигурации, используемый при создании экземпляра, а также моменты срабатывания различных событий и предоставляемые ими параметры. Вот здесь и наступает ключевой момент. В следующих таблицах перечислено то, что часто используется при разработке. Хотя их уже довольно много, это не всё, что есть в SWFUpload. Я перечислил только часто используемые. За полной документацией обратитесь на официальный сайт SWFUpload.
Часто используемые атрибуты и описания в объекте параметров конфигурации SWFUpload
| Свойство | Type | Значение по умолчанию | Описание |
| upload_url | String | URL-адрес серверной страницы, обрабатывающей загруженный файл. Он может быть абсолютным или относительным. Если он относительный, то он указывается относительно адреса документа, в котором находится текущий код. | |
| preserve_relative_urls | Boolean | false | Если false, SWFUpload преобразует относительные адреса, используемые swfupload.swf, в абсолютные для лучшей совместимости. |
| file_post_name | String | Filedata | Эквивалентно атрибуту name при загрузке файлов через обычное поле файла. Серверная принимающая страница использует это имя для получения загруженного файла. |
| post_params | Объект (литерал) | Литерал объекта. Его пары ключ/значение будут загружены вместе с каждым файлом. Это очень полезно, когда нужно прикрепить дополнительную информацию к загружаемым файлам. | |
| use_query_string | Boolean | false | Если false, параметры, определённые атрибутом post_params, будут загружены через POST; если true — через GET (то есть параметры будут добавлены к URL в виде строки запроса). |
| file_types | String | Этот атрибут задаёт разрешённые типы файлов для загрузки. Если типов несколько, разделяйте их точками с запятой, например: *.jpg;*.png. Используйте *.*, чтобы разрешить все типы. | |
| file_types_description | String | Задаёт описание типа файла, отображаемое в окне выбора файла, которое служит подсказкой и пояснением. | |
| file_size_limit | String | Задаёт максимальный размер загружаемого файла. Допускаются единицы измерения. Допустимые единицы: B, KB, MB, GB. Если единица не указана, по умолчанию используется KB. Если этот атрибут равен 0, это означает отсутствие ограничения на размер файла. | |
| file_upload_limit | Number | Задаёт максимальное количество файлов, которые можно загрузить. Когда количество успешно загруженных файлов достигает этого максимума, больше нельзя загружать файлы, а также добавлять файлы в очередь загрузки. Установка этого атрибута в 0 означает отсутствие ограничения на количество загружаемых файлов. | |
| file_queue_limit | Number | Задаёт максимальное количество файлов, которые могут одновременно храниться в очереди загрузки файлов. При превышении этого числа другие файлы можно добавить только после того, как равное количество файлов в очереди было успешно загружено, завершилось ошибкой или было отменено. Когда значение file_upload_limit или оставшееся количество файлов, которые можно загрузить, меньше file_queue_limit, берётся меньшее значение. | |
| flash_url | String | Абсолютный или относительный адрес файла swfupload.swf. Относительный адрес указывается относительно адреса текущей страницы. После создания экземпляра SWFUpload значение этого атрибута больше нельзя изменить. | |
| prevent_swf_caching | Boolean | Если true, после адреса swfupload.swf будет добавлено случайное число, чтобы предотвратить кэширование Flash-ролика. Это делается для предотвращения ошибок, возникающих в некоторых версиях браузеров IE при чтении кэшированных Flash-роликов. | |
| button_placeholder_id | String | Задаёт id DOM-элемента. Этот DOM-элемент будет заменён Flash-кнопкой после создания экземпляра SWFUpload. Этот DOM-элемент служит заполнителем. | |
| button_placeholder | DOMElement | Задаёт DOM-элемент. Этот DOM-элемент будет заменён Flash-кнопкой после создания экземпляра SWFUpload. Этот DOM-элемент служит заполнителем. Если существуют и button_placeholder_id, и button_placeholder, приоритет имеет button_placeholder_id. | |
| button_image_url | String | Задаёт фоновое изображение Flash-кнопки. Допускается как относительный, так и абсолютный адрес. На этот адрес влияет атрибут preserve_relative_urls, и он подчиняется тем же правилам, что и upload_url. Фоновое изображение должно быть спрайт-изображением. Сверху вниз оно содержит четыре состояния Flash-кнопки: обычное, при наведении мыши, нажатое и отключённое. Следовательно, высота этого изображения должна быть в четыре раза больше высоты Flash-кнопки. | |
| button_width | Number | Задаёт ширину Flash-кнопки. | |
| button_height | Number | Задаёт высоту Flash-кнопки. Она должна составлять 1/4 высоты фонового изображения кнопки, заданного button_image_url. | |
| button_text | String | Задаёт текст на Flash-кнопке. Это также может быть HTML-код. | |
| button_text_style | String | Стиль текста на Flash-кнопке. См. пример использования. | |
| button_text_top_padding | Number | Задаёт верхний отступ Flash-кнопки. Можно использовать отрицательные значения. | |
| button_text_left_padding | Number | Задает левый внутренний отступ кнопки Flash. Можно использовать отрицательные значения. | |
| button_disabled | Boolean | false | Если true, кнопка Flash становится отключенной, и щелчок по ней не вызовет никаких действий. |
| button_cursor | Задает стиль курсора при наведении мыши на кнопку Flash. Доступные значения — константы, определенные в SWFUpload.CURSOR. | ||
| button_window_mode | Задает атрибут WMODE кнопки Flash. Доступные значения — константы, определенные в SWFUpload.WINDOW_MODE. | ||
| file_dialog_start_handler | Функция | Функция-обработчик события fileDialogStart | |
| file_queued_handler | Функция | Функция-обработчик события fileQueued | |
| file_queue_error_handler | Функция | Функция-обработчик события fileQueueError | |
| file_dialog_complete_handler | Функция | Функция-обработчик события fileDialogComplete | |
| upload_start_handler | Функция | функция-обработчик события uploadStart | |
| upload_progress_handler | Функция | функция-обработчик события uploadProgress | |
| upload_error_handler | Функция | функция-обработчик события uploadError | |
| upload_success_handler | Функция | функция-обработчик события uploadSuccess | |
| upload_complete_handler | Функция | функция-обработчик события uploadComplete |
Объяснение различных событий SWFUpload
| fileDialogStart ( ) | ||
| Срабатывает, когда окно выбора файла вот-вот появится. | ||
| fileQueued ( объект файла ) | ||
| Это событие срабатывает, когда файл добавляется в очередь загрузки. Единственный предоставляемый параметр — это объект файла, содержащий информацию о файле. | ||
| fileQueueError ( объект файла, код ошибки, сообщение ) | ||
| Это событие срабатывает, когда файл не удаётся добавить в очередь загрузки. Причинами сбоя могут быть: размер файла превышает допустимое значение, файл пуст или очередь файлов уже заполнена, и т. д. Это событие предоставляет три параметра. Первый параметр — объект файла, с которым в данный момент возникла проблема, а второй параметр — конкретный код ошибки, за значением которого можно обратиться к константам, определённым в SWFUpload.QUEUE_ERROR. | ||
| fileDialogComplete ( количество выбранных файлов, количество файлов в очереди, общее количество файлов в очереди ) | ||
| Это событие срабатывает сразу после завершения выбора файлов и обработки выбранных файлов (то есть после добавления в очередь загрузки). Вы можете вызвать метод this.startUpload() в этом событии, чтобы реализовать автоматическую загрузку файлов. Параметр «количество выбранных файлов» означает количество файлов, выбранных в диалоговом окне выбора файлов на этот раз. Параметр «количество файлов в очереди» означает количество файлов, добавленных в очередь загрузки на этот раз. Параметр «общее количество файлов в очереди» указывает, сколько файлов в данный момент находится в очереди загрузки (включая файлы, добавленные на этот раз). | ||
| uploadStart ( объект файла ) | ||
| Это событие срабатывает, когда файл вот-вот будет загружен. Это событие даёт вам последнюю возможность перед загрузкой файла проверить информацию о файле, добавить дополнительные сведения, которые нужно загрузить вместе с файлом, или выполнить другую работу. Вы можете отменить загрузку этого файла, вернув false. Параметр «объект файла» — это объект информации о файле, который сейчас загружается. | ||
| uploadProgress ( объект файла, количество загруженных байтов, всего байтов ) | ||
| Это событие срабатывает многократно во время процесса загрузки файла. Вы можете использовать это событие для реализации индикатора прогресса загрузки. Параметр «объект файла» — это объект информации о файле. Параметр «количество загруженных байтов» — это количество байтов, загруженных на данный момент. Параметр «всего байтов» — это общее количество байтов в файле. | ||
| uploadError ( объект файла, код ошибки, сообщение ) | ||
| Это событие срабатывает, когда загрузка файла прерывается или файл не удаётся успешно загрузить. Остановка или отмена загрузки файла, либо возврат false в событии uploadStart вызовут это событие. Однако если файл отменён, но всё ещё остаётся в очереди, это событие не сработает. Параметр «объект файла» — это объект информации о файле. Параметр «код ошибки» — это код ошибки. Подробности см. в константах, определённых в SWFUpload.UPLOAD_ERROR. | ||
| uploadSuccess ( объект файла, данные сервера, полученный ответ ) | ||
| Это событие срабатывает после успешной загрузки файла. Параметр «объект файла» — это объект информации о файле. Параметр server data — это данные, выводимые сервером. | ||
| uploadComplete( объект файла ) | ||
| Это событие вызывается, когда процесс загрузки файла завершается (успешно или нет). Это событие указывает, что текущая загрузка завершена и следующий файл в очереди загрузки может начать загрузку. После возникновения этого события начнется загрузка следующего файла в очереди. |
Методы экземпляра SWFUpload
Большинство методов динамически изменяют объект конфигурации параметров.
| destroy ( ) | ||
| Когда SWFUpload больше не нужен, можно использовать этот метод, чтобы уничтожить его экземпляр и элементы DOM. | ||
| startUpload( file_id ) | ||
| Начать загрузку указанного файла в очереди. Параметр file_id представляет id файла, который нужно загрузить. Если этот параметр не указан, будет загружен первый файл в очереди. | ||
| cancelUpload ( file_id, trigger_error_event ) | ||
| Отменить загрузку файла. Параметр file_id — это id файла, загрузку которого нужно отменить. Если этот параметр не определен или не указан, будет отменена загрузка первого файла в очереди. Параметр trigger_error_event принимает логическое значение. Если он равен false, отмена файла не вызовет событие uploadError. По умолчанию — true. | ||
| stopUpload ( ) | ||
| Прервать текущий загружаемый файл. Это вызовет событие uploadError. Если в данный момент файл не загружается, метод ничего не делает. | ||
| getStats ( ) | ||
| Получить объект статистики очереди. | ||
| setStats ( stats_object ) | ||
| Изменить stats_object очереди. Передайте изменённый stats_object в качестве параметра. | ||
| getFile ( file_id|index ) | ||
| Получить объект File по идентификатору или индексу файла. При использовании идентификатора файла можно получить только файлы, находящиеся в очереди. При использовании индекса файла можно получить все файлы (как находящиеся в очереди, так и вне её). | ||
| addPostParam ( name, value) | ||
| Добавить пару ключ/значение в объект дополнительной информации, заданный параметром post_params в объекте конфигурации. | ||
| removePostParam ( name) | ||
| Удалить пару ключ/значение, содержащуюся в post_params в объекте конфигурации. Имя параметра — это имя ключа значения, которое нужно удалить. | ||
| addFileParam ( file_id, name, value) | ||
| Добавить дополнительную информацию, которая будет загружена вместе с определённым файлом. Обратите внимание, что дополнительная информация будет загружена только при загрузке указанного файла. Дополнительная информация, заданная в post_param в объекте конфигурации, будет отправляться вместе с любой загрузкой файла. Параметр file_id — это идентификатор указанного файла. Параметры name и value — это имя и значение дополнительной информации соответственно. | ||
| removeFileParam ( file_id, name) | ||
| Удалить дополнительную информацию, добавленную через метод addFileParam. Полагаю, мне не нужно дополнительно объяснять эти два параметра. | ||
| setUploadURL ( url) | ||
| Динамически установить значение upload_url в объекте конфигурации. | ||
| setPostParams ( param_object) | ||
| Динамически установить значение свойства post_params в объекте конфигурации. Новое значение перезапишет старое значение. Параметр param_object должен быть литералом объекта, а его свойства и значения могут быть только строками. | ||
| setFileTypes ( types, description) | ||
| Динамически задает значения свойств file_types и file_types_description в объекте конфигурации. Ни один из параметров нельзя опускать. | ||
| setFileSizeLimit ( file_size_limit) | ||
| Динамически задает значение свойства file_size_limit в объекте конфигурации. | ||
| setFileUploadLimit ( file_upload_limit) | ||
| Динамически задает значение свойства file_upload_limit в объекте конфигурации. | ||
| setFileQueueLimit ( file_queue_limit) | ||
| Динамически задает значение свойства file_queue_limit в объекте конфигурации. | ||
| setFilePostName ( file_post_name) | ||
| Динамически задает значение свойства file_post_name в объекте конфигурации. | ||
| setUseQueryString ( use_query_string) | ||
| Динамически задает значение свойства use_query_string в объекте конфигурации. | ||
| setButtonImageURL ( url) | ||
| Динамически устанавливает значение свойства button_image_url в объекте конфигурации. | ||
| setButtonDimensions ( width, height) | ||
| Динамически устанавливает ширину и высоту Flash-кнопки. Два параметра — это значения width и height, числового типа, и не могут включать единицы измерения. | ||
| setButtonText ( text) | ||
| Динамически устанавливает значение свойства button_text в объекте конфигурации. | ||
| setButtonTextStyle ( css_style_text) | ||
| Динамически устанавливает значение свойства button_text_style в объекте конфигурации. | ||
| setButtonTextPadding ( left, top ) | ||
| Динамически устанавливает отступ слева и сверху Flash-кнопки. | ||
| setButtonDisabled ( isDisabled ) | ||
| Динамически включает или отключает Flash-кнопку. Параметр имеет логическое значение. | ||
| setButtonCursor ( buttonCursor ) | ||
| Динамически задайте значение button_cursor в объекте конфигурации. |
Объект информации о файле (File Object)
В функциях-обработчиках событий объект информации о файле часто используется для получения информации о файле для следующего шага.
| Свойство | Type | Описание |
| id | String | Идентификатор файла, определённый SWFUpload, используется для управления загрузкой файлов. |
| index | Number | Индекс файла, используемый в методе getFile(i). |
| name | String | Исходное имя файла без пути. |
| type | String | Тип файла |
| creationdate | Date | Дата создания файла |
| modificationdate | Date | Дата последнего изменения файла |
| filestatus | Number | Текущее состояние файла. Для получения подробных сведений обратитесь к константам, определённым в SWFUpload.FILE_STATUS. |
Объект состояния очереди (объект статистики)
Используется для получения текущего состояния очереди.
| Свойство | Type | Описание |
| in_progress | Number | Значение равно 1 или 0 и указывает, загружается ли в данный момент файл в очереди. |
| files_queued | Number | Количество файлов, находящихся в данный момент в очереди на загрузку. |
| successful_uploads | Number | Количество успешно загруженных файлов (то есть было вызвано событие uploadSuccess). |
| upload_errors | Number | Количество файлов, которые не удалось загрузить (включая отменённые загрузки). |
| upload_cancelled | Number | Количество файлов, загрузка которых была отменена. |
| queue_errors | Number | Количество файлов, вызвавших событие fileQueueError. |
Некоторые константы
Некоторые константы, определённые SWFupload для облегчения понимания.
| Имя константы | Описание |
| SWFUpload.instances | Эта константа — объект, который представляет коллекцию ссылок на все экземпляры SWFUpload на странице, индексированную по свойству movieName экземпляра SWFUpload. |
| SWFUpload.movieCount | Количество экземпляров SWFUpload, присутствующих на странице. |
| SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED | Пользователь выбрал больше файлов, чем разрешённое количество. |
| SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT | Размер файла превышает разрешённый размер. |
| SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE | Файл пуст. |
| SWFUpload.QUEUE_ERROR.INVALID_FILETYPE | Недопустимый тип файла. |
| SWFUpload.UPLOAD_ERROR.HTTP_ERROR | Код состояния, возвращённый сервером, не равен 200. |
| SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL | upload_url не задан. |
| SWFUpload.UPLOAD_ERROR.IO_ERROR | Произошла ошибка при чтении или передаче файла. |
| SWFUpload.UPLOAD_ERROR.SECURITY_ERROR | Загрузка ограничена по соображениям безопасности. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED | Количество загруженных файлов превышает разрешённый максимум. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED | Произошла ошибка загрузки |
| SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND | Идентификатор файла, переданный в метод startUpload(), не существует. |
| SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED | В методе uploadStart() было возвращено false. |
| SWFUpload.UPLOAD_ERROR.FILE_CANCELLED | Загрузка была отменена. |
| SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED | Загрузка была прервана. |
| SWFUpload.FILE_STATUS.QUEUED | Файл ожидает в очереди на загрузку. |
| SWFUpload.FILE_STATUS.IN_PROGRESS | Файл загружается. |
| SWFUpload.FILE_STATUS.ERROR | Произошла ошибка при добавлении файла в очередь или его загрузке. |
| SWFUpload.FILE_STATUS.COMPLETE | Файл успешно загружен. |
| SWFUpload.FILE_STATUS. | Загрузка файла была отменена. |
| SWFUpload.CURSOR.ARROW | Мышь отображается в виде стрелки. |
| SWFUpload.CURSOR.HAND | Курсор мыши отображается в виде руки. |
| SWFUpload.WINDOW_MODE.WINDOW | Кнопка Flash будет отображаться поверх всех DOM-элементов на странице. |
| SWFUpload.WINDOW_MODE.OPAQUE | Разрешить другим DOM-элементам перекрывать кнопку Flash. |
| SWFUpload.WINDOW_MODE.TRANSPARENT | Разрешить прозрачное отображение кнопки Flash. |
URL загрузки
- Адрес для скачивания SWFupload:https://code.google.com/p/swfupload/
- Официальная документация SWFUpload (версия 2.5.0):http://www.w3cschool.cc/w3cnote/swfupload-document.html