Прямого пути в VichUploader нет, но можно указать Symfony использовать собственное хранилище и добавить туда логику плагина.
Установите плагин предварительно подписанных URL-адресов для Flysystem
composer require sistemi-etime/flysystem-plugin-aws-s3-v3
Используйте плагин с Flysystem через пакет oneup_flysystem.yaml
config:
oneup_flysystem:
filesystems:
aws_s3:
...
...
plugins:
- s3.plugin.presigned_url
Определите собственное хранилище
<?php
use Vich\UploaderBundle\Storage\FlysystemStorage;
class CustomFlysystemStorage extends FlysystemStorage
{
// Copy the parent method code but then return the presigned URL
public function resolveUri($obj, ?string $fieldName = null, ?string $className = null)
{
[$mapping, $filename] = $this->getFilename($obj, $fieldName, $className);
if (empty($filename)) {
return null;
}
$dir = $mapping->getUploadDir($obj);
$path = !empty($dir) ? $dir.'/'.$filename : $filename;
$fs = $this->getFilesystem($mapping, $obj, $fieldName, $className);
return $fs->getPresignedUrl($path);
}
}
Используйте его внутри services.yaml
:
# alias the custom storage to be used instead of the one defined by VichUploader
vich_uploader.storage.flysystem: '@Your\Own\Namespace\CustomFlysystemStorage'
Исправить автоподключение (почему? ????♂️)
[Изменить: вот почему] < / em>
Кроме того, мне пришлось явно указать псевдоним аргументов, необходимых для FlysystemStorage
, чтобы Symfony Autowire инициализировал пользовательское хранилище:
Vich\UploaderBundle\Mapping\PropertyMappingFactory: '@vich_uploader.property_mapping_factory'
League\Flysystem\MountManager: '@oneup_flysystem.mount_manager'
Хотя я не уверен, зачем это было нужно.
Я ожидал бы, что либо vich_uploader.property_mapping_factory
, либо oneup_flysystem.mount_manager
уже определены и имеют псевдонимы конфигурациями из VichUploaderBundle и
Если кто-нибудь знает, как пропустить это исправление, прокомментируйте.
person
Kamafeather
schedule
15.04.2020
resolveUri
наreturn $filesystem->getPresignedUrl($path)
, а затем переопределилvich_uploader.storage.flysystem
с пользовательским классом хранения наservices.yaml
. - person Kamafeather   schedule 15.04.2020