Kaydet (Commit) 81e3e496 authored tarafından Baran Sekin's avatar Baran Sekin

Added large file upload

üst 116d8ab9
......@@ -24,6 +24,8 @@ class VerifyCsrfToken extends Middleware
"/lmn/private/putFileApi",
"/lmn/private/getFileApi",
"/lmn/private/runScriptApi",
"/lmn/private/putSession"
"/lmn/private/putSession",
'/upload',
'/upload/*',
];
}
<?php
namespace App\Providers;
use TusPhp\Tus\Server as TusServer;
use Illuminate\Support\ServiceProvider;
class TusServiceProvider extends ServiceProvider
{
// ...
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('tus-server', function ($app) {
\TusPhp\Config::set([
'file' => [
'dir' => '/tmp/',
'name' => 'tus_php.cache',
],
]);
$server = new TusServer();
$server
->setApiPath('/upload');
return $server;
});
}
}
\ No newline at end of file
......@@ -33,6 +33,7 @@
29 => 'App\\Providers\\BroadcastServiceProvider',
30 => 'App\\Providers\\EventServiceProvider',
31 => 'App\\Providers\\RouteServiceProvider',
32 => 'App\\Providers\\TusServiceProvider',
),
'eager' =>
array (
......@@ -56,6 +57,7 @@
17 => 'App\\Providers\\BroadcastServiceProvider',
18 => 'App\\Providers\\EventServiceProvider',
19 => 'App\\Providers\\RouteServiceProvider',
20 => 'App\\Providers\\TusServiceProvider',
),
'deferred' =>
array (
......
......@@ -13,6 +13,7 @@
"ext-ssh2": "*",
"ext-xml": "*",
"ext-zip": "*",
"ankitpokhrel/tus-php": "^1.0",
"beyondcode/laravel-websockets": "^1.3",
"guzzlehttp/guzzle": "^6.3",
"icewind/smb": "^3.1",
......
This diff is collapsed.
......@@ -178,6 +178,7 @@ return [
// Jenssegers\Mongodb\MongodbServiceProvider::class,
// Jenssegers\Mongodb\MongodbQueueServiceProvider::class,
/* Collective\Remote\RemoteServiceProvider::class,*/
App\Providers\TusServiceProvider::class,
],
/*
......
......@@ -2039,6 +2039,15 @@
"simple-swizzle": "0.2.2"
}
},
"combine-errors": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/combine-errors/-/combine-errors-3.0.3.tgz",
"integrity": "sha1-9N9nQAg+VwOjGBEQwrEFUfAD2oY=",
"requires": {
"custom-error-instance": "2.1.1",
"lodash.uniqby": "4.5.0"
}
},
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
......@@ -2592,6 +2601,11 @@
}
}
},
"custom-error-instance": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/custom-error-instance/-/custom-error-instance-2.1.1.tgz",
"integrity": "sha1-PPY5FIemYppiR+sMoM4ACBt+Nho="
},
"cyclist": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
......@@ -3240,6 +3254,11 @@
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
......@@ -4309,8 +4328,7 @@
"graceful-fs": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
"integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
"dev": true
"integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg=="
},
"growly": {
"version": "1.3.0",
......@@ -5069,6 +5087,11 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
"js-base64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
"integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw=="
},
"js-levenshtein": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
......@@ -5266,18 +5289,72 @@
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
},
"lodash._baseiteratee": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash._baseiteratee/-/lodash._baseiteratee-4.7.0.tgz",
"integrity": "sha1-NKm1VDVycnw9sueO2uPA6eZr0QI=",
"requires": {
"lodash._stringtopath": "4.8.0"
}
},
"lodash._basetostring": {
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz",
"integrity": "sha1-kyfJ3FFYhmt/pLnUL0Y45XZt2d8="
},
"lodash._baseuniq": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz",
"integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=",
"requires": {
"lodash._createset": "4.0.3",
"lodash._root": "3.0.1"
}
},
"lodash._createset": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz",
"integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY="
},
"lodash._root": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
"integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI="
},
"lodash._stringtopath": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/lodash._stringtopath/-/lodash._stringtopath-4.8.0.tgz",
"integrity": "sha1-lBvPDmQmbl/B1m/tCmlZVExXaCQ=",
"requires": {
"lodash._basetostring": "4.12.0"
}
},
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
"lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
},
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
"dev": true
},
"lodash.uniqby": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz",
"integrity": "sha1-o6F7v2LutiQPSRhG6XwcTipeHiE=",
"requires": {
"lodash._baseiteratee": "4.7.0",
"lodash._baseuniq": "4.6.0"
}
},
"loglevel": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
......@@ -6933,6 +7010,22 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"proper-lockfile": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-2.0.1.tgz",
"integrity": "sha1-FZ+wYZPTIAP0s2kd0uwaY0qoDR0=",
"requires": {
"graceful-fs": "4.2.0",
"retry": "0.10.1"
},
"dependencies": {
"retry": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
"integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q="
}
}
},
"proxy-addr": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
......@@ -7040,8 +7133,7 @@
"querystringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
"dev": true
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
},
"randombytes": {
"version": "2.1.0",
......@@ -7254,8 +7346,7 @@
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
"resolve": {
"version": "1.11.1",
......@@ -8335,6 +8426,27 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
"tus-js-client": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-1.8.0.tgz",
"integrity": "sha512-qPX3TywqzxocTxUZtcS8X7Aik72SVMa0jKi4hWyfvRV+s9raVzzYGaP4MoJGaF0yOgm2+b6jXaVEHogxcJ8LGw==",
"requires": {
"buffer-from": "0.1.2",
"combine-errors": "3.0.3",
"extend": "3.0.2",
"js-base64": "2.5.1",
"lodash.throttle": "4.1.1",
"proper-lockfile": "2.0.1",
"url-parse": "1.4.7"
},
"dependencies": {
"buffer-from": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
"integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="
}
}
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
......@@ -8560,7 +8672,6 @@
"version": "1.4.7",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
"integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
"dev": true,
"requires": {
"querystringify": "2.1.1",
"requires-port": "1.0.0"
......
This diff is collapsed.
{
"/css/liman.css": "/css/liman.css?id=3ea9dafc6b5cd1e7120e",
"/js/liman.js": "/js/liman.js?id=0c849cb1c9fb1617c5e7"
"/js/liman.js": "/js/liman.js?id=58f90d9d4addcef7fd51"
}
function upload(option){
if (typeof option.file === "undefined") {
return;
}
let server_id = $('meta[name=server_id]').attr("content");
let extension_id = $('meta[name=extension_id]').attr("content");
var upload = new tus.Upload(option.file, {
endpoint: "/upload?extension_id="+extension_id,
retryDelays: [0, 1000, 3000, 5000, 10000],
overridePatchMethod: true,
chunkSize: 1000 * 1000,
metadata: {
filename: option.file.name,
filetype: option.file.type
},
onError: option.onError,
onProgress: option.onProgress,
onSuccess: function(){
option.onSuccess(upload);
},
headers: {
"server_id": server_id,
"extension_id": extension_id
}
});
upload.start();
}
\ No newline at end of file
This diff is collapsed.
@isset($id)
@php($rand = $id)
@else
@php($rand = str_random(10))
@endisset
<div class="form-group">
<label>{{ isset($title) ? __($title) : '' }}</label>
<div class="input-group" id="{{ $rand }}-file-input">
<input type="text" id="{{ $rand }}-selected-file" placeholder="{{ isset($title) ? __($title) : '' }}" class="form-control" readonly>
<span class="input-group-btn">
<button class="btn btn-labeled btn-secondary" id="{{ $rand }}-browse" style="border-radius: 0px;">{{ __('Gözat') }}</button>
</span>
<span class="input-group-btn">
<button class=" btn btn-labeled btn-primary" id="{{ $rand }}-upload" disabled style="border-radius: 0px;">{{ __('Yükle') }}</button>
</span>
<input type="file" name="{{ isset($name) ? $name : '' }}" id="{{ $rand }}-upload-file" style="display:none;"/>
</div>
</div>
<div class="progress active" id="{{ $rand }}-progress" style="display:none; margin-top: 5px;">
<div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
<span class="progress-txt"></span>
</div>
</div>
<script type="text/javascript">
jQuery(document).ready(function ($) {
var uploadButton = $('#{{ $rand }}-upload'),
selectedFile = $('#{{ $rand }}-selected-file');
$('#{{ $rand }}-file-input').on('change', function (e) {
var name = e.target.value.split('\\').reverse()[0];
if (name) {
selectedFile.val(name);
uploadButton.attr('disabled', false);
} else {
selectedFile.val('');
uploadButton.attr('disabled', true);
}
});
$('#{{ $rand }}-browse, #{{ $rand }}-selected-file').click(function(){
$('#{{ $rand }}-upload-file').click();
});
});
$( "#{{ $rand }}-upload" ).click(function() {
let selectedFile = $('#{{ $rand }}-upload-file').prop('files');
upload({
file: selectedFile[0],
onError: function(error){
Swal.fire({
position: 'center',
type: 'error',
title: error,
showConfirmButton: false,
});
},
onProgress: function(bytesUploaded, bytesTotal){
let percent = (bytesUploaded/bytesTotal)*100;
$('#{{ $rand }}-progress').show();
$('#{{ $rand }}-progress').addClass('active');
$('#{{ $rand }}-progress').find('.progress-bar').attr('aria-valuenow', percent);
$('#{{ $rand }}-progress').find('.progress-bar').attr('style', 'width: '+percent+'%');
$('#{{ $rand }}-progress').find('.progress-txt').text(Math.round(percent)+"%");
},
onSuccess: function(upload){
@isset($callback)
{{$callback}}(upload);
@endisset
$('#{{ $rand }}-progress').removeClass('active');
$('#{{ $rand }}-progress').find('.progress-txt').text("{{ __('Yükleme tamamlandı') }}");
},
});
});
</script>
......@@ -109,4 +109,19 @@ Route::post('/lmn/private/runScriptApi','Extension\OneController@internalRunScri
Route::post('/lmn/private/putSession','Extension\OneController@internalPutSessionApi');
Route::get('/test','HomeController@test');
\ No newline at end of file
Route::get('/test','HomeController@test');
Route::any('/upload/{any?}', function () {
$server = app('tus-server');
$extension_id = request("extension_id");
$extension = \App\Extension::find($extension_id);
if($extension){
$path = env('EXTENSIONS_PATH') . strtolower($extension->name);
if (!file_exists($path."/uploads")) {
mkdir($path."/uploads");
}
$server->setUploadDir($path."/uploads");
}
$response = $server->serve();
return $response->send();
})->where('any', '.*');
\ No newline at end of file
......@@ -19,6 +19,7 @@ mix.styles([
mix.combine([
'resources/assets/js/jquery.js',
'resources/assets/js/jquery-ui.js',
'resources/assets/js/tus.min.js',
'resources/assets/js/jquery.contextMenu.js',
'resources/assets/js/bootstrap.js',
'resources/assets/js/bootstrap-datepicker.js',
......@@ -39,4 +40,5 @@ mix.combine([
'resources/assets/js/echo.common.js',
'resources/assets/js/pusher.min.js',
'resources/assets/js/liman.js',
'resources/assets/js/tus.js',
], 'public/js/liman.js').version();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment