Обработка загрузки файлов plupload в Symfony 2

Я пытаюсь написать контроллер для приема загрузки файлов из подключаемого модуля Plupload. В качестве дополнительной забавы загрузки загружаются с другого URL-адреса, поэтому я должен сам установить заголовок Access-Control-Allow-Origin. До сих пор я делал это так:

/**
 * @Route("/frontEnd/file/upload.{_format}")
 */
public function upload(Request $request) {
    $response = new Response();
    $response->setContent(json_encode(array('hello' => 'world')));
    $response->setStatusCode(200);
    $response->headers->set('Access-Control-Allow-Origin', '*');
    $response->send();
}

который, кажется, работает. Когда я отправляю загрузки с помощью plupload, я вижу, что запросы XHR попадают в Symfony, и возвращается JSON. Однако я понятия не имею, как обрабатывать фактический файл и переместить его в каталог.

Я сделал var_dump() на $_POST, и он вернул только следующее:

array(1) {
  ["name"]=>
  string(21) "wallpaper-2873928.jpg"
}

Загрузка определенно отправляется, так как я вижу байты файла, являющиеся частью полезной нагрузки запроса с помощью инструментов разработчика. Нужно ли мне использовать собственные компоненты Symfony для обработки загрузки? Если да, то как? Документация Symfony, кажется, охватывает только загрузку из формы загрузки файла.


person John Dorean    schedule 14.08.2013    source источник
comment
обрабатывать его как обычную загрузку, плагин должен отправлять файл как загрузку формы.   -  person Emii Khaos    schedule 14.08.2013


Ответы (1)


Прежде всего, попробуйте использовать способ доступа к параметрам запроса Symfony2. Дополнительную информацию можно получить в книге.

При загрузке файла Symfony2 автоматически создает экземпляр UploadedFile для вас и помещает его в FileBag в объекте запроса .

Вы можете получить доступ к файлам в вашем контроллере следующим образом:

$files = $request->files;

Как было сказано ранее, это временные файлы. Чтобы загрузить их в определенный пользователем каталог, используйте метод move для объекта.

$directory = //...

foreach ($files as $uploadedFile) {
    $name = //...
    $file = $uploadedFile->move($directory, $name);
}

Переменная $files теперь содержит экземпляр File.


С другой стороны, вы также можете использовать пакет, поддерживающий загрузчик Plupload. Я бы порекомендовал OneupUploaderBundle. (Примечание: я являюсь основным разработчиком этого пакета, думаю, это нужно добавить).

person devsheeep    schedule 14.08.2013