Files
biblio/src/Service/FileService.php
2022-06-03 15:17:46 +02:00

74 lines
1.9 KiB
PHP

<?php
namespace App\Service;
use App\Entity\Book;
use App\Entity\File;
use App\Repository\FileRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileService
{
private Filesystem $fileSystem;
private string $bookFiles;
private FileRepository $fileRepository;
public function __construct(string $bookFiles, FileSystem $filesystem, FileRepository $fileRepository,)
{
$this->bookFiles = $bookFiles;
$this->fileSystem = $filesystem;
$this->fileRepository = $fileRepository;
}
/**
* @param Collection|File $files
* @return void
*/
public function removeFiles(Collection|File $files)
{
if (!$files instanceof Collection) {
$files = new ArrayCollection([$files]);
}
foreach ($files as $file) {
$this->fileSystem->remove($this->getFilePath($file));
}
}
public function getFilePath(File $file): string
{
return $this->bookFiles . DIRECTORY_SEPARATOR . $this->getFileName($file);
}
public function getFileName(File $file): string
{
return 'ebook_' . $file->getBook()->getId() . '_' .
md5($file->getFileName()) . '.' .
$file->getExtension();
}
/**
* @param UploadedFile $ebook
* @param Book $book
* @return File
*/
public function saveFile(UploadedFile $ebook, Book $book): File
{
$file = new File();
$file->setFileName(trim($ebook->getClientOriginalName()));
$file->setFileSize($ebook->getSize());
$file->setExtension($ebook->getClientOriginalExtension());
$file->setBook($book);
$this->fileRepository->add($file, true);
$ebook->move(
$this->bookFiles,
$this->getFileName($file)
);
return $file;
}
}