74 lines
1.9 KiB
PHP
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->guessClientExtension());
|
|
$file->setBook($book);
|
|
$this->fileRepository->add($file, true);
|
|
|
|
$ebook->move(
|
|
$this->bookFiles,
|
|
$this->getFileName($file)
|
|
);
|
|
return $file;
|
|
}
|
|
|
|
} |