getClientOriginalExtension(); } /** * Saves file into FS and creates new record in database * * @param UploadedFile $file * @param UploadRequest $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, UploadRequest $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 [ '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 UploadRequest $request * @param $originalFilename * * @return mixed */ protected function saveIntoDatabase(SymphonyFile $file, UploadRequest $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 $params = [ 'user_id' => Auth::user()->id, 'filename' => $file->getFilename(), 'original_filename' => $originalFilename, 'file_hash' => $hash, 'hash_algorithm' => self::HASH_ALGORITHM, 'mime_type' => $file->getMimeType(), ]; // save optional fields $optionalFields = ['description', 'keywords', 'directory']; foreach ($optionalFields as $field) { if ($request->has($field)) { $params[$field] = $request->$field; } } // create new database row $newFile = File::create($params); return $newFile->id; } }