В API-интерфейсе API нет встроенной поддержки загрузки файлов. Вам нужно написать свой собственный код для обработки загрузок. Тем не менее, некоторые работы - это некоторая работа, выполняемая для добавления этой функции, и вы уже можете ее использовать.
В принципе, идея:
- Encode файл для загрузки в
data:
URI на стороне клиента (с помощью JavaScript)
- Отправить данные URI (в основном base64 строка) в качестве типичного свойства String объекта используя Restangular (или любой другой HTTP-клиент)
- Расшифруйте
data:
URI на стороне сервера в обычный файл с помощью Symfony Serializer
- магазин это обычный файл на сервере: это до вас, чтобы сохранить его в файловой системе или в Больше современные движки, такие как Mongo GridFS или Amazon S3
стороне клиента
Чтобы получить data:
URI на стороне клиента из выбранного файла, вы можете рассчитывать на readAsDataURL
в API FileReader
JavaScript: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL , Отправьте полученную строку, как обычно, с помощью Restangular.
Серверный
Система Платформа нормализации API построен на вершине Symfony Serializer. Я внедрил нормализатор и denormalizer URI data:
в Symfony: https://github.com/symfony/symfony/pull/16164 Он еще не слит, но вы можете его скопировать в свой собственный проект за это время.
Регистрация нормализатор:
services:
data_uri_normalizer:
class: 'AppBundle\Serializer\DataUriNormalizer'
tags:
- { name: serializer.normalizer }
Затем создайте (и регистр) новый нормализатор украшающие ItemNormalizer
из API платформы превратить ваше свойство, содержащее файл, закодированный как data:
URI к стандартному \SplFileObject
с использованием метода DataUriNormalizer::denormalize()
,
В будущей версии платформы API (планируется для версии 2.1 с Symfony 3.1) вся эта логика будет автоматически доступна и зарегистрирована.