Передача имени файла из UploadNamer в UploadListener в Symfony v4.1 с OneUpUploaderBundle

Вступление

я использую Symfony v4.1.* с OneUpUploaderBundle.
Мне нужно установить уникальное имя для каждого загруженного файла — это работает.

я имею tree structure, который содержит загруженные файлы.
Для управления файлами в дереве у меня есть несколько свойств.
Некоторые из них:

  1. имя элемента (транслитерированное имя файла + счетчик + уникальное_стинг)
  2. itemOriginalName (транслитерированное имя файла + счетчик)
  3. itemExtension (расширение файла — например .txt или же .a если каталог)
  4. itemSortValue (расширение файла + транслитерированное имя файла + счетчик + уникальная_строка)

ItemSortValue гарантирует, что ветви дерева (поля) отсортированы по алфавиту.

проблема

Мне также нужно сохранить информацию о загруженном файле в базе данных.
Для этого мне нужно получить каждый complete file name это управляется UploadNamer в моем UploadListener в onPostUpload событие.

path/to/file/my_file_name(counter)_{time}_{uniqueString}.extension

Мне нужно сохранить то же уникальное имя файла в базе данных.
И все же проблема, с которой я сталкиваюсь, заключается в том, что я не знаю и не могу найти только, как передавать информацию от UploadNamer в uploadListener,

Я пытался использовать $this->originalName но это не дало положительных результатов.

Вопрос

Как передать значение из UploadNamer в UploadListener (событие onPostUpload) в Symfony v4.1 с OneUpUploaderBundle?

КОД:

пользовательское имя

public function name(FileInterface $file)
{
$upload_file_path = $this->ultraHelpers->getUploadableFilePath();

$unique_string = $this->ultraHelpers->getUniqueString(true);

$file_name = $file->getClientOriginalName();
$file_info = $this->ultraHelpers->filterFileInfoFromFilename($file_name);

return sprintf('%s/%s_%s.%s',
$upload_file_path,
$this->ultraText->transliterateText($file_info['name']),
$unique_string,
$file_info['extension']
);
}

UploadNamer пример вывода

dir1/dir2/dir3/my_file_name_1539617029_23bf16f962c658103f10ece7d3ba7a88.txt

that corresponds to
path/to/file/my_file_name(counter)_{time}_{uniqueString}.extension

мой UploadListener

<?php

namespace App\EventListener;

use App\UltraHelpers\UltraFileTree;
use App\UltraHelpers\UltraHelpers;
use App\UltraHelpers\UltraText;
use DateTime;
use App\Entity\FileTree;
use Doctrine\ORM\EntityManagerInterface;
use Oneup\UploaderBundle\Event\PreUploadEvent;
use Oneup\UploaderBundle\Event\PostUploadEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class UploadListener
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;

/**
* @var SessionInterface
*/
protected $session;

/**
* @var ContainerInterface
*/
protected $container;

/**
* @var UltraHelpers
*/
protected $ultraHelpers;

/**
* @var UltraText
*/
protected $ultraText;

/**
* @var UltraFileTree
*/
protected $ultraFileTree;

protected $originalName;

public function __construct(EntityManagerInterface $entityManager, SessionInterface $session, ContainerInterface $container, UltraHelpers $ultraHelpers, UltraText $ultraText, UltraFileTree $ultraFileTree)
{
$this->entityManager = $entityManager;
$this->session = $session;
$this->container = $container;
$this->ultraHelpers = $ultraHelpers;
$this->ultraText = $ultraText;
$this->ultraFileTree = $ultraFileTree;
$this->originalName = [];
}

public function onUpload(PreUploadEvent $event)
{
$file = $event->getFile();

$file_info = $this->ultraHelpers->filterFileInfoFromPath($file->getClientOriginalName());
$this->originalName = $this->ultraText->transliterateText($file_info['name']);

$response = $event->getResponse();
$message = [
'error' => 'none'
];
$response->addToOffset($message, array('files'));
}

public function onPostUpload(PostUploadEvent $event)
{
$now_date_time = date('Y-m-d H:i:s');

$repo_file_tree = $this->entityManager->getRepository('App:FileTree');
$repo_project = $this->entityManager->getRepository('App:Project');
$repo_whereabouts = $this->entityManager->getRepository('App:Whereabouts');

$whereabouts = $this->session->get('whereabouts');
$my_whereabouts = $repo_whereabouts->getWhereabouts($whereabouts);

// get project object
$project_obj = $repo_project->findOneBy(array('id' => $my_whereabouts['project_id']));
// get current directory object
$node_selected_obj = $repo_file_tree->findOneBy(array('id' => $my_whereabouts['node_selected_id']));

$file = $event->getFile();
$file_size = $file->getSize();

$current_file_name_parts = $this->ultraHelpers->getFileNameParts($this->originalName);
$postfix_txt = $this->ultraHelpers->getFileNamePostfixTxt($current_file_name_parts['name'], $my_whereabouts['node_selected_id']);

$file_tree = new FileTree();
$file_tree->setItemOriginalName($current_file_name_parts['name'] . $postfix_txt);
$file_tree->setItemName($current_file_name_parts['name'] . $postfix_txt);
$file_tree->setItemExtension('.'. $current_file_name_parts['extension']);
$file_tree->setItemSortValue('.'. $current_file_name_parts['extension'] .'.'. $current_file_name_parts['name'] . $postfix_txt);
$file_tree->setItemSize($file_size);
$file_tree->setUpdatedAt(new DateTime($now_date_time));
$file_tree->setIsFile(true);
$file_tree->setParent($node_selected_obj);
$file_tree->setProject($project_obj);

$this->entityManager->persist($file_tree);
$this->entityManager->flush();
$this->entityManager->clear();

// pārkārto FileTree koka zaru ievērojot jaunpievienoto failu
$file_tree_branch_node_id = $repo_file_tree->getOneFileTreeNode($my_whereabouts['node_selected_id']);
$this->ultraFileTree->reorderFileTreeBranch($file_tree_branch_node_id);

$event->getResponse();
}
}

Заключение

Пожалуйста, порекомендуйте.

Спасибо за ваше время и знания.

Обновление 1

добавленной вопрос GitHub (# 348) в OneupUploaderBundle на GitHub

0

Решение

Можно получить имя файла от имени с $file->getPathname в eventListener,

Я обнаружил скрытую ошибку в блоке кода, что привело меня к мысли, что существует проблема с именем файла …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]