Страница 1 из 5

EAjaxUpload

Добавлено: 2011.03.04, 19:58
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

Re: EAjaxUpload

Добавлено: 2011.03.05, 23:18
pr_o
Интересно, учту в разработках.
p.s. один раз только сталкивался с системой без флеша: Ubuntu x64, - не мог там флеш поставить xD

Re: EAjaxUpload

Добавлено: 2011.03.07, 11:41
alexzv
Если не ошибаюсь, то писали что у этого расширения вроде как проблемы с Оперой...

Re: EAjaxUpload

Добавлено: 2011.03.07, 14:11
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;
    }
 

Re: EAjaxUpload

Добавлено: 2011.04.04, 16:28
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(...)

Re: EAjaxUpload

Добавлено: 2011.04.20, 08:28
justice
У меня почему то при любой загрузке пишет Failed и как будто даже загружать не пытается :(

Re: EAjaxUpload

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

Re: EAjaxUpload

Добавлено: 2011.04.21, 11:17
justice
Спасибо. Все получилось :)

Re: EAjaxUpload

Добавлено: 2011.08.02, 11:27
hellboy
justice писал(а):Спасибо. Все получилось :)
что именно вы сделали?

Re: EAjaxUpload

Добавлено: 2011.08.22, 18:08
hellboy
Пример использования:

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

см. модель Attachment

Re: EAjaxUpload

Добавлено: 2011.09.26, 16:28
xoma
А проблем с русскими буквами в именах файлов не было ?

Re: EAjaxUpload

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

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

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

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

Спасибо

Re: EAjaxUpload

Добавлено: 2012.03.29, 08:48
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 Мб он пишет что ограничение. Что может быть

Re: EAjaxUpload

Добавлено: 2012.05.15, 09:20
vovanz

Re: EAjaxUpload

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

Re: EAjaxUpload

Добавлено: 2012.08.28, 17:48
c.g.alexx
Кто может посоветовать как после загрузки изображения ещё раз создать кнопку загрузки? Заранее спасибо.

Re: EAjaxUpload

Добавлено: 2012.10.02, 22:03
TranceSmile
Тема конечно старая но спрошу. Файлы грузит, проверяю в папке есть. А вот результат выполнения failed.

Re: EAjaxUpload

Добавлено: 2012.10.02, 22:34
kosenka
TranceSmile писал(а):Тема конечно старая но спрошу. Файлы грузит, проверяю в папке есть. А вот результат выполнения failed.
Хорошо бы получить побольше информации

Re: EAjaxUpload

Добавлено: 2012.10.03, 07:12
TranceSmile
Что именно детальней рассказать. Все запросы проходят без проблем. Файл оказывается в папке. А вот результат выдает failed.

Re: EAjaxUpload

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