/**
  * @param \Illuminate\Database\Eloquent\Model $subject
  * @param string                              $key
  *
  * @return \Spatie\MediaLibrary\FileAdder\FileAdder
  *
  * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded
  */
 public static function createFromRequest(Model $subject, string $key)
 {
     if (!request()->hasFile($key)) {
         throw FileCannotBeAdded::requestDoesNotHaveFile($key);
     }
     return static::create($subject, request()->file($key));
 }
 /**
  * Add a remote file to the medialibrary.
  *
  * @param string $url
  *
  * @return \Spatie\MediaLibrary\FileAdder\FileAdder
  *
  * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded
  */
 public function addMediaFromUrl(string $url)
 {
     if (!($stream = @fopen($url, 'r'))) {
         throw FileCannotBeAdded::unreachableUrl($url);
     }
     $tmpFile = tempnam(sys_get_temp_dir(), 'media-library');
     file_put_contents($tmpFile, $stream);
     $filename = basename(parse_url($url, PHP_URL_PATH));
     return app(FileAdderFactory::class)->create($this, $tmpFile)->usingName(pathinfo($filename, PATHINFO_FILENAME))->usingFileName($filename);
 }
 /**
  * Determine the disk to be used.
  *
  * @param string $diskName
  *
  * @return string
  *
  * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded
  */
 protected function determineDiskName(string $diskName)
 {
     if ($diskName === '') {
         $diskName = config('laravel-medialibrary.defaultFilesystem');
     }
     if (is_null(config("filesystems.disks.{$diskName}"))) {
         throw FileCannotBeAdded::diskDoesNotExist($diskName);
     }
     return $diskName;
 }
 protected function deleteOrphanedFiles()
 {
     $diskName = $this->argument('disk') ?: config('laravel-medialibrary.defaultFilesystem');
     if (is_null(config("filesystems.disks.{$diskName}"))) {
         throw FileCannotBeAdded::diskDoesNotExist($diskName);
     }
     $mediaIds = collect($this->mediaRepository->all()->pluck('id')->toArray());
     collect($this->fileSystem->disk($diskName)->directories())->filter(function (string $directory) use($mediaIds) {
         return is_numeric($directory) ? !$mediaIds->contains((int) $directory) : false;
     })->each(function (string $directory) use($diskName) {
         if (!$this->isDryRun) {
             $this->fileSystem->disk($diskName)->deleteDirectory($directory);
         }
         $this->info("Orphaned media directory `{$directory}` " . ($this->isDryRun ? 'found' : 'has been removed'));
     });
 }