app-verk/google-cloud-storage-media-bundle

AppVerk 媒体包上传到 Google Cloud Storage

安装数: 17,811

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 4

公开问题: 0

类型:symfony-bundle

v1.1.0 2022-01-23 10:02 UTC

This package is auto-updated.

Last update: 2024-08-30 12:32:07 UTC


README

Symfony 媒体包。该包允许轻松上传文件。该包需要 dropzone.js 脚本来工作。

配置

使用 composer 需求该包

$ composer require app-verk/google-cloud-storage-media-bundle

在内核中启用该包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new AppVerk\GoogleCloudStorageMediaBundle\GoogleCloudStorageMediaBundle(),
        // ...
    );
}

创建您的 Media 类

<?php

namespace AppBundle\Entity;

use AppVerk\GoogleCloudStorageMediaBundle\Entity\Media as BaseMedia;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 */
class Media extends BaseMedia
{

}

添加到 config.yml

twig:
    form:
        resources:
            - 'GoogleCloudStorageMediaBundle:form:fields.html.twig'
            
google_cloud_storage_media:
    namer: "AppVerk\\GoogleCloudStorageMediaBundle\\Namer\\DefaultNamer"
    filesystem: "default.storage"
    filesystem_url_retriever: 'AppVerk\GoogleCloudStorageMediaBundle\Flysystem\Retriever\LocalObjectUrlRetriever'
    entities:
        media_class: AppBundle\Entity\Media
    gcs:
        project_id: 123
        bucket_id: my_bucket
        key_file_path: "default"
    allowed_mime_types: ["image/jpeg", "image/jpg", "image/png", "image/gif", "application/pdf"]

添加到 routing.yml

media:
    resource: '@GoogleCloudStorageMediaBundle/Controller/'
    type: annotation

将这些库添加到您的管理面板

<!--css -->
<link rel="stylesheet" href="{{ asset('bundles/media/css/dropzone.min.css') }}" />

<!-- js -->
<script src="{{ asset('bundles/media/js/dropzone.min.js') }}"></script>

更新您的数据库模式

$ php app/console doctrine:schema:update --force

媒体表单类型

<?php

use Symfony\Component\Form\AbstractType;
use AppVerk\GoogleCloudStorageMediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\FormBuilderInterface;

class Post extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $formMapper
            ->add('image', MediaType::class)
        ;
    }
}

Twig 辅助函数

渲染媒体

<img src="{{ post.media|media }}" />

验证组

该包允许以不同方式验证每个使用的 MediaType。例如,您只想允许 PDF 文件。

您需要在 config.yml 中添加组

media:
    entities:
        media_class: AppBundle\Entity\Media
    allowed_mime_types: ["image/png", "image/gif"]
    max_file_size: 15000000
    groups:
        lorem:
            allowed_mime_types: ["application/pdf"]
            max_file_size: 560000

在 MediaType 中设置组

$formMapper->add('image', MediaType::class, [
    'group' => 'lorem'
]);

使用新的 StorageService 和 flysystem 层

为了使用新的 AppVerk\GoogleCloudStorageMediaBundle\Service\v2\StorageService,您必须

正确配置 flysystem(示例)

config/packages/flysystem.yaml

flysystem:
    storages:
        default.storage:
            adapter: 'gcloud'
            public: true
            options:
                client: 'gcloud_client_service'
                bucket: 'some-bucket-name'

config/services/storage.yaml

parameters:

services:
    _defaults:
        autowire: true
        autoconfigure: true

    gcloud_client_service:
        class: Google\Cloud\Storage\StorageClient
        arguments:
            - projectId: '%google_cloud_storage_media.gcs.project_id%'
              keyFilePath: '%google_cloud_storage_media.gcs.key_file_path%'

然后,根据需要配置媒体包 config/packages/google_cloud_storage_media.yaml

google_cloud_storage_media:
    ...
    gcs:
        project_id: your-project-id
        bucket_id: your-bucket-id
        key_file_path: path-to-keyfile
    namer: "AppVerk\\GoogleCloudStorageMediaBundle\\Namer\\NamerInterface" # default
    filesystem: "default.storage" # use your storage name from flysystem here
    filesystem_url_retriever: 'AppVerk\GoogleCloudStorageMediaBundle\Flysystem\Retriever\GoogleObjectUrlRetriever' # configure url retriever for proper path storing

许可

该包在 MIT 许可证 下发布。