Laravel plupload support.
Handeling chunked uploads.
Install using composer
composer require evgen-dev/plupload-for-laravel
Add the provider to config/app.php
'providers' => [
EvgenDev\LaravelPlupload\LaravelPluploadServiceProvider::class,
]
And the facade for short record if you want
'aliases' => array(
'Plupload' => EvgenDev\LaravelPlupload\Facades\Plupload::class,
),
return [
'invalid_file_extension' => 'It is forbidden to upload .:extension files',
'max' => [
'file' => 'The :attribute field must not be greater than :max :units.',
]
];
Route::post('/upload', function(){
return Plupload::receive('file', function($file){
$file->move(storage_path() . '/plupload/', $file->getClientOriginalName());
return true;
});
});
use EvgenDev\LaravelPlupload\Filters\Filesize;
Route::post('/upload', function(){
return Plupload::sizelimit(3, Filesize::FILE_SIZE_UNITS_MB)
->receive('file', function($file){
$file->move(storage_path() . '/plupload/', $file->getClientOriginalName());
return true;
});
});
Route::post('/upload', function()
{
return Plupload::extensions(['jpg', 'png', 'gif'])->receive('file', function($file){
$file->move(storage_path() . '/plupload/', $file->getClientOriginalName());
return true;
});
});
use \EvgenDev\LaravelPlupload\Filters\Filesize;
Route::post('/upload', function()
{
return Plupload::sizelimit(5, Filesize::FILE_SIZE_UNITS_MB)
->extensions(['jpg', 'png', 'gif'])
->receive('file', function($file){
$file->move(storage_path() . '/plupload/', $file->getClientOriginalName());
return 'ready';
});
});
use EvgenDev\LaravelPlupload\Facades\Plupload;
public function upload(Request $request){
return Plupload::sizelimit(5, Filesize::FILE_SIZE_UNITS_MB)
->extensions(['txt'])
->receive('file', function($file){
$filename = uniqid().'.'.$file->extension();
$file->move(storage_path() . '/plupload/', $filename);
return ['success' => true, 'filename' => $filename];
});
}
There are two ways.
Add in your blade file
<meta name="csrf-token" content="{{ csrf_token() }}">
in your Plupload inititalization JS file, add
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
Don't forget to refresh the token after each request.
Add to your route rule:
->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
It should turn out like this:
Route::post('/upload', function()
{
return Plupload::receive('file', function($file){
$file->move(storage_path() . '/plupload/', $file->getClientOriginalName());
return true;
});
})->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
Add to your JS file event handling:
uploader.bind('ChunkUploaded', function(up, file, response) {
response = jQuery.parseJSON(response.response);
if(response.error && (response.error.code == 413 || response.error.code == 415)){
alert(response.error.message);
file.destroy();
}
up.refresh();
});
Enjoy!