ynloultratech / graphql-media-service
使用 GraphQL API 提供和管理文件
1.1.1
2019-08-22 16:09 UTC
Requires
- php: ^7.1.3
- doctrine/annotations: ^1.5
- doctrine/common: ^2.8
- mindplay/readable: ^1.1
- mtdowling/jmespath.php: ^2.4
- myclabs/deep-copy: ^1.7
- spatie/url-signer: ^1.0
- symfony/form: ^3.4
- symfony/framework-bundle: ^3.4
- ynloultratech/graphql-bundle: ^1.4
Requires (Dev)
- behat/behat: ^3.4
- behat/symfony2-extension: ^2.1
- cocur/slugify: ^3.0
- doctrine/doctrine-bundle: ^1.6
- doctrine/doctrine-fixtures-bundle: ^2.4
- doctrine/orm: ^2.5
- escapestudios/symfony2-coding-standard: 3.x-dev
- fresh/doctrine-enum-bundle: 5.2
- fzaninotto/faker: ^1.7
- lexik/jwt-authentication-bundle: ^2.4
- mockery/mockery: dev-master
- monolog/monolog: ^1.23
- phpunit/phpunit: ^6.2
- symfony/monolog-bundle: ^3.1
- symfony/phpunit-bridge: ^3.1
- symfony/web-server-bundle: ^3.3
This package is auto-updated.
Last update: 2024-08-29 04:48:29 UTC
README
构建您的应用程序时,您可能需要图片、视频,甚至可能还需要演示文稿。GraphQL Media Service 处理所有这些媒体资产,并将它们集中起来,以便您可以按照您喜欢的方式找到内容:快速且高效。
- 通过单个端点通过 API 上传您的文件。
- 用于获取详细信息和解压 URL 的文件 GraphQL 对象。
- 使用签名 URL 的公共和私有文件
- 文件与实体之间的直接关系
安装
使用 composer 安装
composer require graphql-media-service
它是如何工作的?
使用方法
以下步骤假设您已经使用 graphql-bundle 配置了 GraphQL API。
在您的 config.yml
中添加以下配置
#config.yml media_service: class: AppBundle\Entity\File default_storage: public_files storage: public_files: local: dir_name: "%kernel.root_dir%/../public/uploads" base_url: 'http://example.com/uploads'
出于性能原因,公共文件直接通过 http 服务器提供,因此
base_url
必须是一个有效的公共可访问文件夹,其中包含文件。
创建一个新的实体 File
namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Ynlo\GraphQLBundle\Annotation as GraphQL; use Ynlo\GraphQLMediaService\Model\AbstractFile; /** * @ORM\Entity() * @ORM\Table() * * @GraphQL\ObjectType() */ class File extends AbstractFile { }
在这种情况下,您必须在您的 graphql 模式中有名为 uploadFile
的突变,有关使用多部分表单数据上传文件的详细信息,请参阅 graphql-multipart-request-spec。
将上传的文件分配给现有对象
上传文件到服务器只是第一步,您必须能够将这些文件链接到现有对象。例如,将上传的照片链接到用户个人资料。
在现有实体上创建一个字段来存储关系
/** * @ORM\Entity() * @ORM\Table() * * @GraphQL\ObjectType() */ class Profile implements NodeInterface { //.... /** * @var File * * @ORM\OneToOne(targetEntity="AppBundle\Entity\File", orphanRemoval=true) * * @GraphQL\Expose() * * @MediaService\AttachFile() */ protected $photo;
注意,在链接到文件的属性上需要标注
@MediaService\AttachFile()
,以便在运行时解决一些参数,如url
。
@TODO ...