Многократная загрузка файлов с использованием flash uploader и php и сохранение в базе данных mysql

Я хочу разработать бэкэнд-админ-решение для сохранения изображений для поста с помощью мультизагрузочного флеш-загрузчика. Я имею в виду тот тип загрузчика, в котором при нажатии на кнопку обзора, а затем в диалоговом окне открытия можно выбрать несколько файлов с помощью сочетания клавиш CTRL + ЛЕВЫЙ ЩЕЛЧОК МЫШИ).

Я хотел бы сохранить каждое новое изображение в базе данных. Под сохранением я подразумеваю создание новой строки для каждого элемента (изображения) в моей таблице под названием images:

1.id (automatically increasing)
2.file_name
3.user_who_uploaded_that_book

Я также хотел бы ограничить количество файлов, которые пользователь может выложить (например, максимум 20 файлов) где-нибудь в файле конфигурации.

2 ответа

Решение

Лично я фанат Plupload, который включает хороший набор примеров того, как настроить его для загрузки нескольких файлов. Он также включает скрипт upload.php, как пример для настройки бэкэнда.

HTML4 не поддерживает множественный выбор файлов, поэтому для этого вам нужно использовать либо HTML5, либо расширение (например, flash или silverlight). Plupload поддерживает все вышеперечисленное, поэтому вам придется немного сэкономить.

Я думаю, что у вас есть 2 основных вопроса:

  1. Как выбрать локальные файлы для загрузки через flash?
  2. Как отправить несколько файлов на сервер как POST?

Для #1 вам нужно использовать flash.net.FileReference.

Для #2 Во флеш-памяти нет встроенного загрузчика 'Multipart', который, я уверен, вам нужен. Лучший из найденных мной - это гениальный разработчик по имени Евгений: http://blog.inspirit.ru/?p=198. Это прекрасно работает, хотя лично у меня были некоторые проблемы с обработчиком onComplete в IE8 и IE9. Я уверен, что это вина IE, а не Юджина. Я работал над этим, слушая событие HTTPStatusEvent, вот так:

var ml:MultipartURLLoader = new MultipartURLLoader();           
ml.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatusEvent);
ml.addVariable('Content-Type', "image/png");
ml.addFile(pngStream, filename, "file", "image/png");
ml.load('http://...');
function onHTTPStatusEvent( event: HTTPStatusEvent ){           
    if(stat == 0 || (stat >= 200 && stat < 205)){
        //upload success
    }else{
        //some kinda error
    }
}

(Это должно работать с несколькими addFiles(_);)

Я также слушаю стандартные события:

ml.addEventListener(Event.COMPLETE, uploadComplete);
ml.addEventListener(ProgressEvent.PROGRESS, uploadProgress);

Но не удалось заставить PROGRESS работать вообще, и COMPLETE не работает на IE... Кто-нибудь знает какие-либо альтернативы, которые работают на IE? Код Юджина сейчас работает для меня, но я не думаю, что смогу добавить индикатор загрузки "как есть..." как есть... что было бы здорово.

Другие вопросы по тегам