在编写 API 平台时,没有内置的文件上传支持。您需要编写自己的代码来处理上传。但是,有些工作是为了本地添加此功能而做的一些工作,您已经可以使用它了。
基本上,这个想法是:
- 将要上传的文件编码为
data:
URI 客户端(使用 JavaScript)
- 使用 Restangular(或任何其他 HTTP 客户端)将此数据 URI(基本上是 base64 字符串)作为典型的字符串实体属性发送
data:
使用 Symfony 序列化器将 URI 服务器端解码为常规文件
- 将此常规文件存储在服务器上:您可以将其存储在文件系统或更高级的后端,例如 Mongo GridFS 或 Amazon S3
客户端
要从选定文件获取URI 客户端,data:
您可以依赖JavaScript API: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 }
然后创建(并注册)一个新的规范器来装饰API 平台,以使用该方法ItemNormalizer
将包含编码为data:
URI 的文件的属性转换为标准。\SplFileObject
DataUriNormalizer::denormalize()
在 API 平台的未来版本(计划用于带有 Symfony 3.1 的 v2.1)中,所有这些逻辑都将自动可用并注册。