[Extension] Xupload


(Rikius) #1

I found that this extensions is out of date. Maybe some one can update it?


(Asgaroth Belem) #2

The extension is now up to date, any feedback is appreciated thanks.

The link:

http://www.yiiframework.com/extension/xupload/


(Gzav) #3

Hello,

Nice extension, and working great as is. I even used the EXUploadAction file.

However, I would like to integrate this extension in a wider project, and use it as the upload solution for profile photos. The thing is that i need to change the filename (when upload completed) according to a additional data from the form. With the onComplete callback i should update the profile photo.

Since now, i managed to change the filename in the EXUploadAction file (i don’t want to temper with the extension code) using a dummy name, but the callback always gives me the original filename.

How can I send an additional data with the form ? How to rename the file so the onComplete callBack returns the modified name ?

Here is the onComplete callback


'options' => array('onComplete' => 'js:function (event, files, index, xhr, handler, callBack) {

        $("#photo").html(\'<img src="../../images/profiles/\'+files[index].name + \'"/>\' );

                        }'

),

Best Regards,

xavier


(Asgaroth Belem) #4

The files[index].name refers to the current html file field objects, because the name changed in the server and not on the client side this variable is not updated.

What you should use instead is handler.response which holds the JSON response from the server, this JSON is constructed in the action, for XUploadAction:


line 30. echo json_encode(array("name" => $model->name,"type" => $model->mime_type,"size"=> $model->getReadableFileSize()));

There you can add/remove/change any information you want to send back to the client here.

In your specific case, if you changed $model->name before that line, then the JSON already holds the correct name. so your code should look like:


'options' => array('onComplete' => 'js:function (event, files, index, xhr, handler, callBack) {

        $("#photo").html(\'<img src="../../images/profiles/\'+handler.response.name + \'"/>\' );

                        }'

),

Thumbs up, follow if you like this extension, any feedback apreciated


(Gzav) #5

Hi,

It’s working like a charm !!! Many thanks !!!

Is ti possible to pass additional parameters from the form ?


(Rikius) #6

check new version of http://aquantum-demo.appspot.com/file-upload there you can have thumbs directly from your local disk drive, and after upload you also can have resized image.


(Gzav) #7

By the way, for those interested in… my onComplete callback should refresh the image in the div when new file is uploaded. Since the file is renamed with the same name, the image never changes (because of the cache surely).

Well, here goes the work around, just add a time stamp as a parameter for the image file url. This will force a GET.





'options' => array(					

	'onComplete' => 'js:function (event, files, index, xhr, handler, callBack) {

	d = new Date();

        $("#photo").hide().html(\'<img src="../../images/profiles/\'+handler.response.name +\'?\'+ d.getTime() +\'"/>\' ).fadeIn(\'fast\');

                        }'

),




Cheers


(Gzav) #8

Waow, if there is a thumbelize, resize and crop option this is going to be a killer extension !!!


(Asgaroth Belem) #9

I cant find where they mention the resize image thing.


(Asgaroth Belem) #10

Check the wiki, there are several tutorials:


(Marekurbanowicz) #11

Can you post simple example how to use it with Yii?

It looks and works great, but I dont know how to start with this…

Just simple controller code and simple view. Please :)

Can you do this?

How to configure upload path by the controller? (I need pass path so safety for every user)


(Asgaroth Belem) #12

There is an entire Yii project (demo) in the downloads, what is it you are missing?


(Marekurbanowicz) #13

sorry, I didn’t see it!


(Migajek) #14

Hi,

How can I call JS code when the queue is empty?


(Devjam) #15

Hi,

great extension, but it would be even better to have some more documentation on this.

For example, i’d like to know how to get functions on the example-site on example-site at appspot, like alert “File to small!”, etc.

Please extend the demo in the extension-zip.

Thx


(Asgaroth Belem) #16

The documentation in the yii site its about the installation and basic usage, the documentation your guys are asking for, its the jquery documentation.

The answers to all this questions are in the wiki, please take a look there.


(Quarkmarino) #17

Hi, anybody know how to implement multiple instances of the widget in a single page, I’ve created 2 juidialog and loaded a widget on each one from diferent views, but when a add I file to the second xupload widget it is queued to the first one, so how do I add files to each one separately, thank you


(Asgaroth Belem) #18

The jquery plugin has been updated to a new version, however the new documentation lacks many examples for common task, the old wiki has been restored and the examples are now back for the old version, please vote here to update or not the extension. take into account the lack of documentation for the new version.


(Asgaroth Belem) #19

The wiki for the original jquery plugin has been restored

You can find the answer to your specific need [here](https://github.com/blueimp/jQuery-File-Upload/wiki/Multiple-File-Input-Fields-in-one-Form "multiple input fields")


(Sergisonz) #20

Hi.

I’m have a problem whis that extension. I can’t define callback js function.




$this-&gt;widget('ext.xupload.XUploadWidget', array(

					'url' =&gt; Yii::app()-&gt;createUrl(&quot;admin/images/upload&quot;, array(&quot;type&quot; =&gt; $this-&gt;getId(), &quot;item_id&quot; =&gt; $model-&gt;m_id)),

                    'model' =&gt; new Images,

                    'attribute' =&gt; 'images',

					'multiple' =&gt; true,

                    'htmlOptions'=&gt;array('name' =&gt; 'images'),

                    'options' =&gt; array

                        'onComplete' =&gt; 'js:function (event, files, index, xhr, handler, callBack) {

                            console.log(&quot;upload finish&quot;);

                        }',

                    ),

));



I have that error




Uncaught TypeError: Cannot read property 'name' of null     query.fileupload-ui.js:97



Snippet of this file here




this.removeNode = function (node, callBack) {

            if (node) {

                node.fadeOut(function () {

                    $(this).remove();

                    if (typeof callBack === func) {

                        try {

                            callBack();

                        } catch (e) {

                            // Fix endless exception loop:

                            $(this).stop();

                            throw e;

/*jquery.fileupload-ui.js:97Uncaught TypeError: Cannot read property 'name' of null*/

                        }

                    }

                });

            } else if (typeof callBack === func) {

                callBack();

            }

        };



Please help!