EAjaxUpload

Выкладываем свои наработки
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

EAjaxUpload

Сообщение kosenka »

Понадобилось тут для одного проекта сделать загрузку файлов без флеша и родилось расширение EAjaxUpload.
Основано на http://valums.com/ajax-upload/

Во view:

Код: Выделить всё

         $this->widget('ext.EAjaxUpload.EAjaxUpload',
                 array(
                       'id'=>'uploadFile',
                       'config'=>array(
                                       'action'=>'/controller/upload',
                                       'allowedExtensions'=>array("jpg"),//array("jpg","jpeg","gif","exe","mov" and etc...
                                       'sizeLimit'=>10*1024*1024,// maximum file size in bytes
                                       'minSizeLimit'=>10*1024*1024,// minimum file size in bytes
                                       //'onComplete'=>"js:function(id, fileName, responseJSON){ alert(fileName); }",
                                       //'messages'=>array(
                                       //                  'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.",
                                       //                  'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.",
                                       //                  'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.",
                                       //                  'emptyError'=>"{file} is empty, please select files again without it.",
                                       //                  'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled."
                                       //                 ),
                                       //'showMessage'=>"js:function(message){ alert(message); }"
                                      )
                      ));
 
В controller:

Код: Выделить всё

    public function actionUpload()
    {
            Yii::import("ext.EAjaxUpload.qqFileUploader");
            
                $folder='upload/';// folder for uploaded files
                $allowedExtensions = array("jpg"),//array("jpg","jpeg","gif","exe","mov" and etc...
                $sizeLimit = 10 * 1024 * 1024;// maximum file size in bytes
                $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
                $result = $uploader->handleUpload($folder);
                $result=htmlspecialchars(json_encode($result), ENT_NOQUOTES);
                echo $result;// it's array
    }
 
Пример можно посмотреть здесь: http://kosenka.ru
Вложения
EAjaxUpload.rar
(14.17 КБ) 869 скачиваний
Аватара пользователя
pr_o
Сообщения: 65
Зарегистрирован: 2010.01.19, 02:20

Re: EAjaxUpload

Сообщение pr_o »

Интересно, учту в разработках.
p.s. один раз только сталкивался с системой без флеша: Ubuntu x64, - не мог там флеш поставить xD
Аватара пользователя
alexzv
Сообщения: 120
Зарегистрирован: 2010.04.23, 00:10
Откуда: Украина, Киев

Re: EAjaxUpload

Сообщение alexzv »

Если не ошибаюсь, то писали что у этого расширения вроде как проблемы с Оперой...
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: EAjaxUpload

Сообщение kosenka »

alexzv писал(а):Если не ошибаюсь, то писали что у этого расширения вроде как проблемы с Оперой...
Если посмотреть сюда, то видно что: tested in IE7,8; Firefox 3,3.6,4; Safari4,5; Chrome; Opera10.60;
Может быть у старых версий Оперы есть проблемы.
Я тестировал под Оперой 11 - все работает.

Единственное с чем я столкнулся, так это то, что если заливается файл размеров 60 мегов, а memory_limit в php выставлен на 128МБ - файл не закачается (упрется в memory allocate).
Мне кажется, что это связано с этим (qqFileUploader.php):

Код: Выделить всё

class qqUploadedFileXhr {
    /**
     * Save the file to the specified path
     * @return boolean TRUE on success
     */
    function save($path) {
        $input = fopen("php://input", "r");
        $temp = tmpfile();
        $realSize = stream_copy_to_stream($input, $temp);
        fclose($input);

        if ($realSize != $this->getSize()){
            return false;
        }

        $target = fopen($path, "w");
        fseek($temp, 0, SEEK_SET);
        stream_copy_to_stream($temp, $target);
        fclose($target);

        return true;
    }
 
ikarushka
Сообщения: 39
Зарегистрирован: 2010.11.23, 15:49

Re: EAjaxUpload

Сообщение ikarushka »

В Opera работает, надо просто отключить профайлинг http://www.yiiframework.ru/forum/viewto ... f=8&t=1415.
В Opera он загружает файлы через iframe и если профайлинг включен, то во фрейм вместе с ответом экшена попадает и информация профайла.
Немного напрягает то, что valums разбирает json через eval, но это легко поправить. Можно подключить json-парсер http://code.google.com/p/json-sans-eval/ и в fileuploader.js
поменять все eval("("+...+")") на jsonParse(...)
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: EAjaxUpload

Сообщение justice »

У меня почему то при любой загрузке пишет Failed и как будто даже загружать не пытается :(
Feci quod potui,faciant meliora potentes
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: EAjaxUpload

Сообщение kosenka »

justice писал(а):У меня почему то при любой загрузке пишет Failed и как будто даже загружать не пытается :(
Прошу прощения, но телепат из меня плохой.
Откройте FireBug или лог Yii и посмотри какие ошибки пишутся.
Варианты такие:
1) не определяется CSRF - решение: либо отказать от CSRF вообще, либо использовать это: http://creative-territory.net/post/view/id/25/
2) ошибка при программировании (посмотрите как у вас обрабатывается actionUpload)
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: EAjaxUpload

Сообщение justice »

Спасибо. Все получилось :)
Feci quod potui,faciant meliora potentes
hellboy
Сообщения: 9
Зарегистрирован: 2011.07.12, 11:18

Re: EAjaxUpload

Сообщение hellboy »

justice писал(а):Спасибо. Все получилось :)
что именно вы сделали?
hellboy
Сообщения: 9
Зарегистрирован: 2011.07.12, 11:18

Re: EAjaxUpload

Сообщение hellboy »

Пример использования:

http://git.rejunte.org/?p=juntadados.git

см. модель Attachment
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: EAjaxUpload

Сообщение xoma »

А проблем с русскими буквами в именах файлов не было ?
errors
Сообщения: 18
Зарегистрирован: 2011.08.11, 08:36

Re: EAjaxUpload

Сообщение errors »

justice писал(а):Спасибо. Все получилось :)
У меня такаяже проблема. Что Вы сделали конкретно непойму. Извените я новичек.

при проверке actionUpload выводит :{'error':'increase post_max_size and upload_max_filesize to 10M'}
Только может это потомучто при проверке не отправляется файл?

Подскажите пожалуйста.

Весь код точно такойже... только во view minSizeLimit закоментил.

Спасибо
errors
Сообщения: 18
Зарегистрирован: 2011.08.11, 08:36

Re: EAjaxUpload

Сообщение errors »

Код: Выделить всё

$this->widget('ext.EAjaxUpload.EAjaxUpload',
                 array(
                       'id'=>'uploadFile',
                       'config'=>array(
                                       'action'=>'index.php?r=filemanager/default/upload',
                                       'allowedExtensions'=>array("jpg"),//array("jpg","jpeg","gif","exe","mov" and etc...
                                       'sizeLimit'=>60*1024*1024,// maximum file size in bytes
                                       'minSizeLimit'=>1024*1024,// minimum file size in bytes
                                       //'onComplete'=>"js:function(id, fileName, responseJSON){ alert(FileName) }",
                                       //'messages'=>array(
                                       //                  'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.",
                                       //                  'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.",
                                       //                  'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.",
                                       //                  'emptyError'=>"{file} is empty, please select files again without it.",
                                       //                  'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled."
                                       //                 ),
                                       //'showMessage'=>"js:function(message){ alert(message); }"
                                      )
                      ));  
Проблема была в том что

Код: Выделить всё

  'action'=>'index.php?r=filemanager/default/upload', 
должен быть вот такой.

Но теперь другая проблема... я помтавил но приподключении обычных вото от 1 - 3 Мб он пишет что ограничение. Что может быть
vovanz
Сообщения: 18
Зарегистрирован: 2012.05.14, 09:33

Re: EAjaxUpload

Сообщение vovanz »

ZxUkr
Сообщения: 20
Зарегистрирован: 2011.11.21, 13:00

Re: EAjaxUpload

Сообщение ZxUkr »

kosenka писал(а):
justice писал(а):У меня почему то при любой загрузке пишет Failed и как будто даже загружать не пытается :(
Прошу прощения, но телепат из меня плохой.
Откройте FireBug или лог Yii и посмотри какие ошибки пишутся.
Варианты такие:
1) не определяется CSRF - решение: либо отказать от CSRF вообще, либо использовать это: http://creative-territory.net/post/view/id/25/
2) ошибка при программировании (посмотрите как у вас обрабатывается actionUpload)
А не планируется доделать нормальную CSRF обработку? А то главное CSRF ключик вроде как предаётся, и кажется что там не так сложно допилят, если код родной...
c.g.alexx
Сообщения: 5
Зарегистрирован: 2012.07.26, 17:56

Re: EAjaxUpload

Сообщение c.g.alexx »

Кто может посоветовать как после загрузки изображения ещё раз создать кнопку загрузки? Заранее спасибо.
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: EAjaxUpload

Сообщение TranceSmile »

Тема конечно старая но спрошу. Файлы грузит, проверяю в папке есть. А вот результат выполнения failed.
Изображение
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: EAjaxUpload

Сообщение kosenka »

TranceSmile писал(а):Тема конечно старая но спрошу. Файлы грузит, проверяю в папке есть. А вот результат выполнения failed.
Хорошо бы получить побольше информации
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: EAjaxUpload

Сообщение TranceSmile »

Что именно детальней рассказать. Все запросы проходят без проблем. Файл оказывается в папке. А вот результат выдает failed.
Изображение
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: EAjaxUpload

Сообщение kosenka »

TranceSmile писал(а):Что именно детальней рассказать. Все запросы проходят без проблем. Файл оказывается в папке. А вот результат выдает failed.
Покажите код, который отвечает за "прием" файла.
Ответить