getClientOriginalExtension(); } /** * Saves file into FS and creates new record in database * * @param UploadedFile $file * @param $data * * @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, $data = []) { $data = (object)$data; $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 $fileInDB = $this->saveIntoDatabase($uploadedFile, $data, $file->getClientOriginalName()); // fire event about new file Event::fire(new UploadFile($fileInDB)); return [ 'filename' => $filename, 'file' => $file, 'id' => $fileInDB->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 * @param $originalFilename * * @return mixed */ protected function saveIntoDatabase(SymphonyFile $file, $request, $originalFilename) { // get path and hash of uploaded file $path = config('app.upload_path') . DIRECTORY_SEPARATOR . $file->getFilename(); $hash = hash_file(FileModel::HASH_ALGORITHM, $path); // define mandatory fields $newFile = FileModel::create([ 'user_id' => Auth::user()->id, 'filename' => $file->getFilename(), 'original_filename' => $originalFilename, 'file_hash' => $hash, 'hash_algorithm' => FileModel::HASH_ALGORITHM, 'mime_type' => $file->getMimeType(), 'file_size' => $file->getSize(), 'name' => isset($request->name) ? $request->name : '', 'description' => isset($request->description) ? $request->description : '', 'directory_id' => isset($request->directoryId) ? $request->directoryId ? $request->directoryId : null : null, 'keywords' => isset($request->keyword) ? $request->keyword : '' ]); return $newFile; } }