Используя Symfony2, как получить ajax-данные из запроса?

Я хочу загрузить файл с помощью jquery-file-upload (blueimp) с некоторыми данными в кросс-домене.

Поэтому на стороне клиента я использую код из файла basic.html из jqueryfileupload. Я только что добавил forceIframeTransport для междоменного домена ( здесь документ) и formData (для формата документа здесь).

var idResp = {name:'id-resp',value: SLjQuery('#media_answer_answer').data('id-resp')};
var dataSup = $('form#answer_process_form').serializeArray();
dataSup.push(idResp);

$(function () {
    'use strict';
    $('#media_answer_answer').fileupload({
        url: "mywebsite.dev/app_dev.php/api/media/questionnaire-test-media/uploads",
        dataType: 'json',
        formData: dataSup,
        forceIframeTransport: true,
        done: function (e, data) {
            console.log('upload ok ', data);
        },
        progressall: function (e, data) {
             console.log(data.loaded/data.total);
        }
    }).prop('disabled', !$.support.fileInput)
      .parent().addClass($.support.fileInput ? undefined : 'disabled')
    ;
    $('#media_answer_answer').fileupload(
        'option',
        'redirect',
        'mywebsite.dev/result.html?%s'
    );
});

Когда я выбираю файл с помощью ввода, в консоли, журнал прогресса все равно 1. Так что, похоже, отправка. Более того я могу видеть во вкладке сети в консоли отправленный запрос

//in request headers
Content-Length: 43463
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvU5EBWuRkyGkSRBS
...
//in request payload
------WebKitFormBoundaryvU5EBWuRkyGkSRBS
Content-Disposition: form-data; name="media_answer[_token]"

e6583ea5230f1f80a218825ed399115925556f0c
------WebKitFormBoundary1JHxUF9xgtcO5fJ2
Content-Disposition: form-data; name="id-resp"

420
------WebKitFormBoundaryvU5EBWuRkyGkSRBS
Content-Disposition: form-data; name="media_answer[answer]"; filename="file-to-upload.jpg"
Content-Type: image/jpeg

------WebKitFormBoundaryvU5EBWuRkyGkSRBS--

//in response headers
...
X-ChromeLogger-Data: eyJ2ZXJzaW9uIjoiNC4wIiwiY29sdW1.... // I think this is the file in base64
...

Теперь на стороне сервера я использую FosRestBundle для маршрутизации. В моем контроллере Symfony я хочу получить данные и файл.

//result of request
POST /app_dev.php/api/media/questionnaire-test-media/uploads  HTTP/1.1 
Accept:          text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
...
Content-Length:  43463 
Content-Type:    multipart/form-data; boundary=----WebKitFormBoundaryBqSBpxJ6Wyvi2QJH 

Так что content-length это 43463, так что я думаю, что-то есть, но в контроллере $request->getContent() пусто и $request->request->all() тоже.

Знаете ли вы, если данные отправлены? если да, как получить данные в полезной нагрузке? спасибо большое и с новым годом

1 ответ

Решение

Наконец, регистратор Symfony не показывает мне ничего на $request->request->all(), но на вкладке предварительного просмотра в консоли я мог видеть некоторые var_dump на $request->request->all() и он не был пустым (я хочу поклясться сам), он содержит 2 первых данных полезной нагрузки запроса (данные формы размещения контента), но не последние (Content-Type: image/jpeg).

Мне пришлось изменить 2-й данные, чтобы стать

------WebKitFormBoundaryvU5EBWuRkyGkSRBS
Content-Disposition: form-data; name="media_answer[idResp]"

420

Затем в контроллере я могу получить такие данные:

$r = $request->request->all(); // or using $request->getContent() it's also possible in a different way
$rt = $r['media_answer']['_token']; // e6583ea5230f1f80a218825ed399115925556f0c
$ri = $r['media_answer']['id-resp']; // 420

По последним данным: name="media_answer[answer]" filename="file-to-upload.jpg"Как я сказал в комментариях выше, я могу получить файл следующим образом:

$request->files->get('media_answer[answer]', array(), true)

Итак, для имени файла:

$request->files->get('media_answer[answer]', array(), true)->getClientOriginalName()
Другие вопросы по тегам