fork download
  1. <?php
  2.  
  3. namespace AppBundle\Service;
  4.  
  5. use AppBundle\Entity;
  6. use AppBundle\Repository\FileRepository;
  7. use Doctrine\DBAL\Connection;
  8. use Symfony\Component\HttpFoundation\File\File as HttpFoundationFile;
  9.  
  10. class FileUploader
  11. {
  12. /**
  13.   * @var FileNameGenerator
  14.   */
  15. private $fileNameGenerator;
  16.  
  17. /**
  18.   * @var Connection
  19.   */
  20. private $connection;
  21.  
  22. /**
  23.   * @var FileRepository
  24.   */
  25. private $fileRepository;
  26.  
  27. /**
  28.   * @var string
  29.   */
  30. private $uploadDirectory;
  31.  
  32. /**
  33.   * @param string $uploadDirectory
  34.   * @param FileNameGenerator $fileNameGenerator
  35.   * @param FileRepository $fileRepository
  36.   * @param Connection $connection
  37.   */
  38. public function __construct(
  39. $uploadDirectory,
  40. FileNameGenerator $fileNameGenerator,
  41. FileRepository $fileRepository,
  42. Connection $connection
  43. ) {
  44. $this->uploadDirectory = $uploadDirectory;
  45. $this->fileNameGenerator = $fileNameGenerator;
  46. $this->connection = $connection;
  47. $this->fileRepository = $fileRepository;
  48. }
  49.  
  50. /**
  51.   * @param HttpFoundationFile $httpFoundationFile
  52.   * @param string $clientOriginalName
  53.   * @return Entity\File
  54.   */
  55. public function upload(HttpFoundationFile $httpFoundationFile, $clientOriginalName)
  56. {
  57. $saveAs = $this->fileNameGenerator->generatePath($httpFoundationFile);
  58. $file = Entity\File::create($httpFoundationFile, $clientOriginalName, $saveAs);
  59.  
  60. $saveFileInTransaction = function () use ($httpFoundationFile, $file, $saveAs) {
  61. $httpFoundationFile->move($this->uploadDirectory, $saveAs);
  62. $this->fileRepository->add($file);
  63. };
  64.  
  65. $this->connection->transactional($saveFileInTransaction);
  66.  
  67. return $file;
  68. }
  69. }
Success #stdin #stdout 0.01s 82880KB
stdin
Standard input is empty
stdout
Standard output is empty