file = $uploadedFile; $this->data = $data; $sourceFile = new SourceFile([ 'basename' => pathinfo($this->file->getClientOriginalName(), PATHINFO_FILENAME), 'extension' => $this->file->getClientOriginalExtension(), 'tags' => [], 'aspect_ratio' => $this->data['aspectRatio'], 'min_width' => $this->data['minWidth'] ]); $sourceFile->slugAttributes(); $uploadedFile->storeAs('', $sourceFile->path, $this->disk); $sourceFile->save(); return $this->storeAttachment($sourceFile, [ 'title' => $this->data['title'], 'description' => $this->data['description'] ?? '', 'crop' => $this->data['crop'] ]); } public function storeAttachment($sourceFile, $data) { $attachment = $sourceFile->attachments()->create([ 'title' => $data['title'], 'description' => $data['description'] ]); Queue::push(CompressJob::class, [ 'attachment_id' => $attachment->id, 'crop' => $data['crop'] ]); return $attachment; } public function getFileData($id) { $attachment = Attachment::find($id); return $attachment ? [ 'url' => $this->storage()->url($attachment->source->path), 'type' => $this->storage()->mimeType($attachment->source->path), 'size' => $this->storage()->size($attachment->source->path), 'name' => $attachment->slug, 'id' => $id ] : null; } public function removeAttachment($id) { $attachment = Attachment::find($id); collect(Storage::disk($this->disk)->files($attachment->path))->filter(function($file) use ($attachment) { return preg_match($attachment->versionRegex, $file); })->each(function($file) { Storage::disk($this->disk)->delete($file); }); $attachment->delete(); } private function storage() { return Storage::disk($this->disk); } private function originalExtension() { return $this->file->getClientOriginalExtension(); } private function getStrategy() { return app($this->strategy); } }