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 загрузки