API プラットフォームの執筆時点では、組み込みのファイル アップロード サポートはありません。アップロードを処理するには、独自のコードを記述する必要があります。ただし、この機能をネイティブに追加するためにいくつかの作業が行われており、既に使用できます。
基本的に、アイデアは次のとおりです。
- クライアント側の URIとしてアップロードするファイルをエンコードします
data:
(JavaScript を使用)
- Restangular (またはその他の HTTP クライアント) を使用して、このデータ URI (基本的には base64 文字列) を典型的な文字列エンティティ プロパティとして送信します。
data:
Symfony Serializer を使用してサーバー側の URI を通常のファイルにデコードする
- この通常のファイルをサーバーに保存します。ファイルシステムに保存するか、Mongo GridFS や Amazon S3 などのより高度なバックエンドに保存するかはユーザー次第です。
クライアント側
選択したファイルからクライアント側の URIを取得するには、JavaScript APIにdata:
依存できます: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL。Restangular を使用して、結果の文字列を通常どおり送信します。readAsDataURL
FileReader
サーバ側
API プラットフォームの正規化システムは、Symfony シリアライザーの上に構築されています。data:
Symfony に URI ノーマライザーとデノーマライザーを提供しました: 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 プラットフォームの将来のバージョン (Symfony 3.1 で v2.1 を予定) では、このすべてのロジックが自動的に利用可能になり、登録されます。