FEATURE #1337: add file upload
This commit registers new items into admin menu and adds functionality for uploading files.
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\UploadFileRequest;
|
||||
use App\Http\Requests\UploadImageRequest;
|
||||
use App\Models\File;
|
||||
use Symfony\Component\HttpFoundation\File\Exception\FileException;
|
||||
|
||||
class UploadFile extends Controller
|
||||
{
|
||||
/**
|
||||
* @var File
|
||||
*/
|
||||
private $file;
|
||||
|
||||
function __construct(File $file)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->file = $file;
|
||||
}
|
||||
|
||||
public function getFile()
|
||||
{
|
||||
return view('admin/fileManager.newFile');
|
||||
}
|
||||
|
||||
public function getImage()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads any file
|
||||
*
|
||||
* @param UploadFileRequest $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function postFile(UploadFileRequest $request)
|
||||
{
|
||||
if (!$request->hasFile('file')) {
|
||||
return $this->invalidUpload('noFileSpecified');
|
||||
}
|
||||
|
||||
try {
|
||||
$uploadedFile = $this->file->upload($request->file('file'), $request);
|
||||
|
||||
// we do not want to redirect
|
||||
if ($request->ajax()) {
|
||||
return $this->jsonResponse($uploadedFile);
|
||||
}
|
||||
|
||||
// upload was not performed via ajax, redirect user
|
||||
return redirect()
|
||||
->route('upload.file')
|
||||
->with('success', trans('admin/fileManager.uploadSuccessfull'));
|
||||
} catch (FileException $e) {
|
||||
return $this->invalidUpload('invalidFile');
|
||||
}
|
||||
}
|
||||
|
||||
protected function invalidUpload($message)
|
||||
{
|
||||
return redirect()
|
||||
->route('upload.file')
|
||||
->with('error', trans('admin/fileManager.' . $message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads only images
|
||||
*
|
||||
* @param UploadImageRequest $request
|
||||
*/
|
||||
public function postImage(UploadImageRequest $request)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Send response about uploaded file as JSON
|
||||
*
|
||||
* @param $uploadedFile
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
private function jsonResponse($uploadedFile)
|
||||
{
|
||||
$filename = $uploadedFile['file']->getFilename();
|
||||
$url = config('app.upload_path') . DIRECTORY_SEPARATOR . $filename;
|
||||
|
||||
$data = [
|
||||
'filename' => $filename,
|
||||
'url' => $url,
|
||||
'id' => $uploadedFile['id']
|
||||
];
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\UploadFileRequest;
|
||||
use App\Http\Requests\UploadImageRequest;
|
||||
|
||||
class Uploader extends Controller
|
||||
{
|
||||
/**
|
||||
* Uploads any file
|
||||
*
|
||||
* @param UploadFileRequest $request
|
||||
*/
|
||||
public function postFile(UploadFileRequest $request)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads only images
|
||||
*
|
||||
* @param UploadImageRequest $request
|
||||
*/
|
||||
public function postImage(UploadImageRequest $request)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -2,17 +2,13 @@
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
class UploadFileRequest extends Request
|
||||
class UploadFileRequest extends UploadRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
* @internal param array $rules
|
||||
*/
|
||||
public function rules()
|
||||
protected function setRules()
|
||||
{
|
||||
return [
|
||||
'file' => 'required'
|
||||
];
|
||||
$this->rules = ['file' => 'required|image'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
abstract class UploadRequest extends Request
|
||||
{
|
||||
protected $rules = [];
|
||||
|
||||
abstract protected function setRules();
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
// some globaly defined rules
|
||||
$rules = [
|
||||
'keywords' => 'max:255'
|
||||
];
|
||||
|
||||
// setup additional rules
|
||||
$this->setRules();
|
||||
|
||||
foreach ($this->rules as $field => $rule) {
|
||||
$rules[$field] = $rule;
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -90,12 +90,16 @@ Route::group([
|
||||
->name('history.diff');
|
||||
|
||||
// uploader methods
|
||||
Route::post('upload/file', 'Uploader@postFile')
|
||||
Route::get('upload/file', 'UploadFile@getFile')
|
||||
->name('upload.file');
|
||||
|
||||
Route::post('upload/image', 'Uploader@postImage')
|
||||
->name('upload.image');
|
||||
|
||||
// uploader methods
|
||||
Route::post('upload/file', 'UploadFile@postFile')
|
||||
->name('upload.postFile');
|
||||
|
||||
// custom fields
|
||||
// ------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user