1

I want to upload a file with jquery-file-upload (blueimp) in cross domain to a symfony2 application.

To do this, client side :

SLjQuery(function () {
    'use strict';

    SLjQuery('#media_answer_answer').fileupload({
        url: "http://recrutonline.dev/app_dev.php/api/media/questionnaire-test-media/uploads",
        dataType: 'text',
        formData: SLjQuery('form#answer_process_form').serializeArray(),
        forceIframeTransport: true,
        redirect: 'http://mywebsite.dev/result.html?%s',
        done: function (e, data) {
            console.log('upload ok ', data)
        },
        progressall: function (e, data) {
            console.log(data.loaded/data.total);
            var progress = parseInt(data.loaded / data.total * 100, 10);
            SLjQuery('#progress .progress-bar').css(
                'width',
                progress + '%'
            );
        }
    }).prop('disabled', !SLjQuery.support.fileInput)
      .parent().addClass(SLjQuery.support.fileInput ? undefined : 'disabled')
    ;
});

in my controller symfony :

public function postMediaUploadAction(Request $request)
{
    $requestData = $request->request->all();
    $redirectResponse = $requestData['redirect']; // http://mywebsite.dev/result.html?%s
    //...
    //here process on data & get file uploaded
    //...

    //example of data I would send back to the client : http://mywebsite.dev/result.html?{'file':[{'name':'filetoupload.jpg'}]}
    $response = str_replace("%s", "{'file':[{'name':'filetoupload.jpg'}]}", $redirectresponse); // is it the good method ?
    return ??
}

Now client side response received :

in console.log of 'done' parameter of ajax function:

data.result -> undefined
data.textStatus -> "success"

I tried to return many things but result is still undefined. So do you know what kind of data I have to return ?

1 Answer 1

1

Are you using the OneupUploaderBundle?

If so, don't post the file to your own controller but send it to the Oneup uploader endpoint. You can then return custom data by implementing an event listener.

For instance:

namespace Foo\BarBundle\EventListener;

use Oneup\UploaderBundle\Event\PostPersistEvent;

class UploadListener
{
    public function onUpload(PostPersistEvent $event)
    {
        if ($file = $event->getFile()) {
            $response = $event->getResponse();
            $response['file']['name'] = $file->getKey();
        }
    }
}

Register this event listener in your services.yml (or xml file):

# Event listener to handle uploaded files
foo_bundle.upload_listener:
    class: Foo\BarBundle\EventListener\UploadListener
    tags:
        - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onUpload }

When you do want to handle the upload yourself, which I don't recommend, return a Symfony\Component\HttpFoundation\Response or even better a Symfony\Component\HttpFoundation\JsonResponse object. See documentation.

Sign up to request clarification or add additional context in comments.

1 Comment

I'm not using OneupUploaderBundle, but I'm going to try

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.