/** * Copy a file to the mediaLibrary for the given $media. * * @param string $file * @param \Spatie\MediaLibrary\Media $media * @param bool $conversions * @param string $targetFileName */ public function copyToMediaLibrary($file, Media $media, $conversions = false, $targetFileName = '') { $destination = $this->getMediaDirectory($media, $conversions) . ($targetFileName == '' ? pathinfo($file, PATHINFO_BASENAME) : $targetFileName); if ($media->getDiskDriverName() === 'local') { $this->filesystem->disk($media->disk)->put($destination, fopen($file, 'r+')); } else { $this->filesystem->disk($media->disk)->getDriver()->put($destination, fopen($file, 'r+'), ['ContentType' => File::getMimeType($file)]); } }
public function canConvert(Media $media) : bool { if (!$this->requirementsAreInstalled()) { return false; } if ($this->supportedExtensions()->contains(strtolower($media->extension))) { return true; } $urlGenerator = UrlGeneratorFactory::createForMedia($media); if (method_exists($urlGenerator, 'getPath') && file_exists($media->getPath()) && $this->supportedMimetypes()->contains(strtolower(File::getMimetype($media->getPath())))) { return true; } return false; }
/** * Perform the given conversions for the given media. * * @param \Spatie\MediaLibrary\Conversion\ConversionCollection $conversions * @param \Spatie\MediaLibrary\Media $media */ public function performConversions(ConversionCollection $conversions, Media $media) { $tempDirectory = $this->createTempDirectory(); $copiedOriginalFile = $tempDirectory . '/' . str_random(16) . '.' . $media->extension; app(Filesystem::class)->copyFromMediaLibrary($media, $copiedOriginalFile); if ($media->type == Media::TYPE_PDF) { $copiedOriginalFile = $this->convertToImage($copiedOriginalFile); } foreach ($conversions as $conversion) { $conversionResult = $this->performConversion($media, $conversion, $copiedOriginalFile); $renamedFile = MediaLibraryFileHelper::renameInDirectory($conversionResult, $conversion->getName() . '.' . $conversion->getResultExtension(pathinfo($copiedOriginalFile, PATHINFO_EXTENSION))); app(Filesystem::class)->copyToMediaLibrary($renamedFile, $media, 'conversions'); } File::deleteDirectory($tempDirectory); }
/** * Perform the given conversions for the given media. * * @param \Spatie\MediaLibrary\Conversion\ConversionCollection $conversions * @param \Spatie\MediaLibrary\Media $media */ public function performConversions(ConversionCollection $conversions, Media $media) { $imageGenerator = $this->determineImageGenerator($media); if (!$imageGenerator) { return; } $tempDirectory = $this->createTempDirectory(); $copiedOriginalFile = $tempDirectory . '/' . str_random(16) . '.' . $media->extension; app(Filesystem::class)->copyFromMediaLibrary($media, $copiedOriginalFile); foreach ($conversions as $conversion) { $copiedOriginalFile = $imageGenerator->convert($copiedOriginalFile, $conversion); $conversionResult = $this->performConversion($media, $conversion, $copiedOriginalFile); $renamedFile = MediaLibraryFileHelper::renameInDirectory($conversionResult, $conversion->getName() . '.' . $conversion->getResultExtension(pathinfo($copiedOriginalFile, PATHINFO_EXTENSION))); app(Filesystem::class)->copyToMediaLibrary($renamedFile, $media, true); event(new ConversionHasBeenCompleted($media, $conversion)); } File::deleteDirectory($tempDirectory); }
/** * @return string */ public function getHumanReadableSizeAttribute() { return File::getHumanReadableSize($this->size); }
/** * Get the headers to be used when copying the * given file to a remote filesytem. * * @param string $file * * @return array */ public function getRemoteHeadersForFile($file) { $mimeTypeHeader = ['ContentType' => File::getMimeType($file)]; $extraHeaders = $this->config->get('laravel-medialibrary.remote.extra_headers'); return array_merge($mimeTypeHeader, $extraHeaders); }
/** * Copy a file to the mediaLibrary for the given $media. * * @param string $file * @param \Spatie\MediaLibrary\Media $media * @param string $subDirectory * @param string $targetFileName */ public function copyToMediaLibrary($file, Media $media, $subDirectory = '', $targetFileName = '') { $destination = $this->getMediaDirectory($media) . '/' . ($subDirectory != '' ? $subDirectory . '/' : '') . ($targetFileName == '' ? pathinfo($file, PATHINFO_BASENAME) : $targetFileName); $this->filesystems->disk($media->disk)->getDriver()->put($destination, fopen($file, 'r+'), ['ContentType' => File::getMimeType($file)]); }