Files
core/app/Http/Controllers/Admin/UploadFile.php
T
Michal Kváček 24144f6aa4 FEATURE #1337: add file upload
This commit registers new items into admin menu and adds functionality for uploading files.
2016-02-08 14:27:43 +01:00

97 lines
2.3 KiB
PHP

<?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);
}
}