diff --git a/app/Console/Commands/MediaMigrate.php b/app/Console/Commands/MediaMigrate.php new file mode 100644 index 0000000..2df0e40 --- /dev/null +++ b/app/Console/Commands/MediaMigrate.php @@ -0,0 +1,67 @@ +addOption( + 'replace', + null, + InputOption::VALUE_NONE, + 'Replace existing files' + ); + } + + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + $replace = $this->option('replace'); + + $files = File::allFiles(public_path('uploads')); + + foreach ($files as $file) { + $filename = pathinfo($file, PATHINFO_BASENAME); + + $medium = Media::where('name', $filename)->first(); + + if ($medium !== null) { + $medium->update(['status' => 'Processing media']); + StoreUploadedFileJob::dispatch($medium, $file, $replace)->onQueue('media'); + } else { + unlink($file); + } + } + } +} diff --git a/app/Console/Commands/MediaRebuild.php b/app/Console/Commands/MediaRebuild.php new file mode 100644 index 0000000..3515445 --- /dev/null +++ b/app/Console/Commands/MediaRebuild.php @@ -0,0 +1,56 @@ +addOption( + 'replace', + null, + InputOption::VALUE_NONE, + 'Replace existing files' + ); + } + + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + $replace = $this->option('replace'); + + $media = Media::where(['variants' => ''])->orWhere(['variants' => '[]'])->orWhere(['variants' => '{}'])->get(); + foreach ($media as $medium) { + StoreUploadedFileJob::dispatch($medium, '', $replace)->onQueue('media'); + } + } +} diff --git a/app/Jobs/StoreUploadedFileJob.php b/app/Jobs/StoreUploadedFileJob.php index 172c9a7..6f9f724 100644 --- a/app/Jobs/StoreUploadedFileJob.php +++ b/app/Jobs/StoreUploadedFileJob.php @@ -73,11 +73,31 @@ class StoreUploadedFileJob implements ShouldQueue $this->media->status = "Uploading to CDN"; $this->media->save(); - if (Storage::disk($storageDisk)->exists($fileName) == false || $this->replaceExisting == true) { - Storage::disk($storageDisk)->putFileAs('/', new SplFileInfo($this->uploadedFilePath), $fileName); - Log::info("uploading file {$storageDisk} / {$fileName} / {$this->uploadedFilePath}"); + if (strlen($this->uploadedFilePath) > 0) { + if (Storage::disk($storageDisk)->exists($fileName) == false || $this->replaceExisting == true) { + Storage::disk($storageDisk)->putFileAs('/', new SplFileInfo($this->uploadedFilePath), $fileName); + Log::info("uploading file {$storageDisk} / {$fileName} / {$this->uploadedFilePath}"); + } else { + Log::info("file {$fileName} already exists in {$storageDisk} / {$this->uploadedFilePath}. Not replacing file and using local {$fileName} for variants."); + } } else { - Log::info("file {$fileName} already exists in {$storageDisk} / {$this->uploadedFilePath}"); + if (Storage::disk($storageDisk)->exists($fileName) == true) { + Log::info("file {$fileName} already exists in {$storageDisk} / {$this->uploadedFilePath}. No local {$fileName} for variants, downloading from CDN."); + $readStream = Storage::disk($storageDisk)->readStream($fileName); + $tempFilePath = tempnam(sys_get_temp_dir(), 'download-'); + $writeStream = fopen($tempFilePath, 'w'); + while (!feof($readStream)) { + fwrite($writeStream, fread($readStream, 8192)); + } + fclose($readStream); + fclose($writeStream); + $this->uploadedFilePath = $tempFilePath; + + } else { + $errorStr = "cannot upload file {$storageDisk} / {$fileName} / {$this->uploadedFilePath} as temp file is empty"; + Log::info($errorStr); + throw new \Exception($errorStr); + } } if (strpos($this->media->mime_type, 'image/') === 0) { @@ -153,7 +173,7 @@ class StoreUploadedFileJob implements ShouldQueue $this->media->variants = $variants; }//end if - if ($this->uploadedFilePath !== '') { + if (strlen($this->uploadedFilePath) > 0) { unlink($this->uploadedFilePath); }