diff --git a/components/Media/Media.php b/components/Media/Media.php new file mode 100644 index 0000000000..37893d2570 --- /dev/null +++ b/components/Media/Media.php @@ -0,0 +1,45 @@ +. +// }}} + +namespace Component\Media; + +use App\Core\Module; +use App\Entity\File; +use Symfony\Component\HttpFoundation\File\File as SymfonyFile; + +class Media extends Module +{ + public static function validateAndStoreFile(SymfonyFile $sfile, string $dest_dir, ?string $title = null, bool $is_local = true): File + { + // The following properly gets the mimetype with `file` or other + // available methods, so should be safe + $hash = hash_file(File::FILEHASH_ALGO, $sfile->getPathname()); + $file = File::create([ + 'file_hash' => $hash, + 'mimetype' => $sfile->getMimeType(), + 'size' => $sfile->getSize(), + 'title' => $title, + 'timestamp' => $sfile->getMTime(), + 'is_local' => $is_local, + ]); + $sfile->move($dest_dir, $hash); + // TODO Normalize file types + return $file; + } +}