2013-08-14 1 views
0

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

/** 
* @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, по-видимому, охватывает загрузку из формы загрузки файла.

+0

обрабатывать его как обычную загрузку, плагин должен выталкивать файл как загрузку формы. –

ответ

2

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

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

Вы можете получить доступ к файлам в контроллере, как это:

$files = $request->files; 

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

$directory = //... 

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

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


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

+0

Работает как очарование, спасибо. –