Мне удалось что-то сделать в этом направлении, используя CakePHP 1.3, Uploadify (http://www.uploadify.com/) и плагин Miles Johnson's Uploader (http://www.milesj.me/resources/script/uploader-plugin).
). Чтобы заставить все работать правильно, потребовалось немало усилий.Я хочу прочитать документацию по каждой из частей, чтобы все работало так, как вам нужно, но вот как мне это удалось:
По вашему мнению: Включите необходимые библиотеки Javascript: jQuery,SWFObject и Uploadify. Вставьте элемент <input>
, который сценарий Uploadify заменит на загрузчик Flash. Затем вставьте код jQuery для указания параметров Uploadify (подробности в документах Uploadify). При установке URL-адреса для Uploadify для публикации в,обязательно укажите идентификатор сеанса в качестве одного из аргументов. В моем примере я передал его в качестве первого аргумента (см. ниже раздел «Контроллер beforeFilter», чтобы узнать, что с ним делать).
В вашем контроллере: Включитькомпонент Uploader плагина Uploader. Добавьте что-то вроде этого в beforeFilter:
function beforeFilter() {
if ($this->action == 'upload') {
$this->Session->id($this->params['pass'][0]);
$this->Session->start();
}
parent::beforeFilter();
}
Создайте действие для загрузки.Мой выглядит примерно так:
function upload(){
Configure::write('debug', 0);
$this->autoRender = false;
if (isset($this->params['form']['Filedata'])) {
$this->data['Upload'] = $this->params['form'];
$data = $this->Uploader->upload('Filedata');
}
}
Вот в чем суть.
Однако есть несколько ошибок.
Я передаю идентификатор сессии контроллеруи начать новый сеанс с этим идентификатором, поскольку публикация Uploadify на URL-адрес может рассматриваться как исходящая от другого пользовательского агента, что может привести к ошибкам.Вы можете обойти это, передав идентификатор сеанса браузера в действие загрузки и начав новый сеанс с этим идентификатором в beforeFilter, как показано выше.
Кроме того, компонент Uploader имеет встроенную проверку mimetype.Тем не менее, загрузчик Flash, который предоставляет Uploadify, отправляет каждый файл с каким-либо mimetype «file-uploaded-by-flash» независимо от типа mime-типа исходного файла.Я справился с этим, отключив проверку прямо в коде плагина Uploader.Это означает, что если вы хотите проверить mimetypes загруженных файлов, вам придется добавить его в другом месте.
Извините, что это так расплывчато, но я сделал это некоторое время назад, и я не помню,все детали.Тем не менее, я надеюсь, что это поможет вам в правильном направлении.