getClientOriginalExtension(); } /** * Saves file into FS and creates new record in database * * @param UploadedFile $file * @param Request $request * * @return array associative array - key 'file' is type of SymphonyFile and contains info about real file, key 'id' * is ID of row in files table */ public function upload(UploadedFile $file, Request $request) { $destination = config('app.upload_path'); $filename = $this->getFilename($file); // save file into physical location (local FS) $uploadedFile = $file->move($destination, $filename); // insert record into database $id = $this->saveIntoDatabase($uploadedFile, $request, $file->getClientOriginalName()); // fire event about new file Event::fire(new UploadFile($uploadedFile, $id)); return [ 'filename' => $filename, 'file' => $file, 'id' => $id ]; } /** * Save file into database * * This file saves new record into database. It also calculates hash of given file, obtains MIME type etc. * * @param SymphonyFile $file * @param Request $request * @param $originalFilename * * @return mixed */ protected function saveIntoDatabase(SymphonyFile $file, Request $request, $originalFilename) { // get path and hash of uploaded file $path = config('app.upload_path') . DIRECTORY_SEPARATOR . $file->getFilename(); $hash = hash_file(self::HASH_ALGORITHM, $path); // define mandatory fields $newFile = new File(); $newFile->user_id = Auth::user()->id; $newFile->filename = $file->getFilename(); $newFile->original_filename = $originalFilename; $newFile->file_hash = $hash; $newFile->hash_algorithm = self::HASH_ALGORITHM; $newFile->mime_type = $file->getMimeType(); $newFile->file_size = $file->getSize(); // save optional fields $optionalFields = ['name', 'description', 'keywords', 'directoryId']; foreach ($optionalFields as $field) { if ($request->has($field)) { $snakeField = snake_case($field); $newFile->$snakeField = $request->$field; } } // create new database row $newFile->save(); return $newFile->id; } }