mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 08:12:15 +00:00
added delete_failed_files into SchedulerService.php
This commit is contained in:
@@ -34,6 +34,10 @@ class Kernel extends ConsoleKernel
|
|||||||
|
|
||||||
$schedule->call(function () use ($scheduler) {
|
$schedule->call(function () use ($scheduler) {
|
||||||
$scheduler->delete_old_zips();
|
$scheduler->delete_old_zips();
|
||||||
|
|
||||||
|
if (!is_storage_driver(['local'])) {
|
||||||
|
$scheduler->delete_failed_files();
|
||||||
|
}
|
||||||
})->everySixHours();
|
})->everySixHours();
|
||||||
|
|
||||||
// Run queue jobs every minute
|
// Run queue jobs every minute
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Tools\Guardian;
|
use App\Http\Tools\Guardian;
|
||||||
use App\Http\Tools\Editor;
|
use App\Http\Tools\FileManagerService;
|
||||||
use App\Models\Folder;
|
use App\Models\Folder;
|
||||||
use App\Models\File;
|
use App\Models\File;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -50,7 +50,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create new folder
|
// Create new folder
|
||||||
return Editor::create_folder($request);
|
return FileManagerService::create_folder($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,7 +77,7 @@ class EditItemsController extends Controller
|
|||||||
Guardian::check_item_access($request->parent_id, $shared);
|
Guardian::check_item_access($request->parent_id, $shared);
|
||||||
|
|
||||||
// Create folder
|
// Create folder
|
||||||
return Editor::create_folder($request, $shared);
|
return FileManagerService::create_folder($request, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -117,11 +117,11 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// If request have a change folder icon values set the folder icon
|
// If request have a change folder icon values set the folder icon
|
||||||
if ($request->type === 'folder' && ($request->filled('emoji') || $request->filled('color'))) {
|
if ($request->type === 'folder' && ($request->filled('emoji') || $request->filled('color'))) {
|
||||||
Editor::set_folder_icon($request, $id);
|
FileManagerService::set_folder_icon($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename Item
|
// Rename Item
|
||||||
return Editor::rename_item($request, $id);
|
return FileManagerService::rename_item($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,11 +160,11 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// If request have a change folder icon values set the folder icon
|
// If request have a change folder icon values set the folder icon
|
||||||
if ($request->type === 'folder' && $request->filled('icon')) {
|
if ($request->type === 'folder' && $request->filled('icon')) {
|
||||||
Editor::set_folder_icon($request, $id);
|
FileManagerService::set_folder_icon($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename item
|
// Rename item
|
||||||
$item = Editor::rename_item($request, $id, $shared);
|
$item = FileManagerService::rename_item($request, $id, $shared);
|
||||||
|
|
||||||
// Set public url
|
// Set public url
|
||||||
if ($item->type !== 'folder') {
|
if ($item->type !== 'folder') {
|
||||||
@@ -215,7 +215,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Delete item
|
// Delete item
|
||||||
Editor::delete_item($item, $item['id']);
|
FileManagerService::delete_item($item, $item['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response(null, 204);
|
return response(null, 204);
|
||||||
@@ -258,7 +258,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Delete item
|
// Delete item
|
||||||
Editor::delete_item($file, $file['id'], $shared);
|
FileManagerService::delete_item($file, $file['id'], $shared);
|
||||||
}
|
}
|
||||||
// Return response
|
// Return response
|
||||||
return response('Done', 204);
|
return response('Done', 204);
|
||||||
@@ -292,7 +292,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return new uploaded file
|
// Return new uploaded file
|
||||||
return Editor::upload($request);
|
return FileManagerService::upload($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -322,7 +322,7 @@ class EditItemsController extends Controller
|
|||||||
Guardian::check_item_access($request->folder_id, $shared);
|
Guardian::check_item_access($request->folder_id, $shared);
|
||||||
|
|
||||||
// Return new uploaded file
|
// Return new uploaded file
|
||||||
$new_file = Editor::upload($request, $shared);
|
$new_file = FileManagerService::upload($request, $shared);
|
||||||
|
|
||||||
// Set public access url
|
// Set public access url
|
||||||
$new_file->setPublicUrl($token);
|
$new_file->setPublicUrl($token);
|
||||||
@@ -363,7 +363,7 @@ class EditItemsController extends Controller
|
|||||||
abort(404, 'Requested folder doesn\'t exists.');
|
abort(404, 'Requested folder doesn\'t exists.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$zip = Editor::zip_folder($id);
|
$zip = FileManagerService::zip_folder($id);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -396,7 +396,7 @@ class EditItemsController extends Controller
|
|||||||
abort(404, 'Requested folder doesn\'t exists.');
|
abort(404, 'Requested folder doesn\'t exists.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$zip = Editor::zip_folder($id, $shared);
|
$zip = FileManagerService::zip_folder($id, $shared);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -440,7 +440,7 @@ class EditItemsController extends Controller
|
|||||||
->whereIn('id', $request->input('items'))
|
->whereIn('id', $request->input('items'))
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$zip = Editor::zip_files($files);
|
$zip = FileManagerService::zip_files($files);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -475,7 +475,7 @@ class EditItemsController extends Controller
|
|||||||
->whereIn('id', $request->items)
|
->whereIn('id', $request->items)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$zip = Editor::zip_files($files, $shared);
|
$zip = FileManagerService::zip_files($files, $shared);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -517,7 +517,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Move item
|
// Move item
|
||||||
Editor::move($request, $to_id);
|
FileManagerService::move($request, $to_id);
|
||||||
|
|
||||||
return response('Done!', 204);
|
return response('Done!', 204);
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,7 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Editor::move($request, $request->to_id);
|
FileManagerService::move($request, $request->to_id);
|
||||||
|
|
||||||
return response('Done!', 204);
|
return response('Done!', 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Tools;
|
namespace App\Services;
|
||||||
|
|
||||||
use App;
|
use App;
|
||||||
use App\Models\Folder;
|
use App\Models\Folder;
|
||||||
@@ -25,7 +25,7 @@ use Madnest\Madzipper\Facades\Madzipper;
|
|||||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||||
|
|
||||||
|
|
||||||
class Editor
|
class FileManagerService
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Store folder icon
|
* Store folder icon
|
||||||
@@ -456,9 +456,6 @@ class Editor
|
|||||||
// Move files to external storage
|
// Move files to external storage
|
||||||
if (!is_storage_driver(['local'])) {
|
if (!is_storage_driver(['local'])) {
|
||||||
|
|
||||||
// Clear failed uploads if exists
|
|
||||||
self::clear_failed_files();
|
|
||||||
|
|
||||||
// Move file to external storage service
|
// Move file to external storage service
|
||||||
self::move_to_external_storage($disk_file_name, $thumbnail);
|
self::move_to_external_storage($disk_file_name, $thumbnail);
|
||||||
}
|
}
|
||||||
@@ -483,38 +480,6 @@ class Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear failed files
|
|
||||||
*/
|
|
||||||
private static function clear_failed_files()
|
|
||||||
{
|
|
||||||
$local_disk = Storage::disk('local');
|
|
||||||
|
|
||||||
// Get all files from storage
|
|
||||||
$files = collect([
|
|
||||||
$local_disk->allFiles('files'),
|
|
||||||
$local_disk->allFiles('chunks')
|
|
||||||
])->collapse();
|
|
||||||
|
|
||||||
$files->each(function ($file) use ($local_disk) {
|
|
||||||
|
|
||||||
// Get the file's last modification time.
|
|
||||||
$last_modified = $local_disk->lastModified($file);
|
|
||||||
|
|
||||||
// Get diffInHours
|
|
||||||
$diff = Carbon::parse($last_modified)->diffInHours(Carbon::now());
|
|
||||||
|
|
||||||
// Delete if file is in local storage more than 24 hours
|
|
||||||
if ($diff > 24) {
|
|
||||||
|
|
||||||
Log::info('Failed file or chunk ' . $file . ' deleted.');
|
|
||||||
|
|
||||||
// Delete file from local storage
|
|
||||||
$local_disk->delete($file);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move file to external storage if is set
|
* Move file to external storage if is set
|
||||||
*
|
*
|
||||||
@@ -546,6 +511,7 @@ class Editor
|
|||||||
$client = $adapter->getClient();
|
$client = $adapter->getClient();
|
||||||
|
|
||||||
// Prepare the upload parameters.
|
// Prepare the upload parameters.
|
||||||
|
// TODO: replace local files with temp folder
|
||||||
$uploader = new MultipartUploader($client, config('filesystems.disks.local.root') . '/files/' . $file, [
|
$uploader = new MultipartUploader($client, config('filesystems.disks.local.root') . '/files/' . $file, [
|
||||||
'bucket' => $adapter->getBucket(),
|
'bucket' => $adapter->getBucket(),
|
||||||
'key' => 'files/' . $file
|
'key' => 'files/' . $file
|
||||||
@@ -570,6 +536,7 @@ class Editor
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Stream file object to s3
|
// Stream file object to s3
|
||||||
|
// TODO: replace local files with temp folder
|
||||||
Storage::putFileAs('files', config('filesystems.disks.local.root') . '/files/' . $file, $file, 'private');
|
Storage::putFileAs('files', config('filesystems.disks.local.root') . '/files/' . $file, $file, 'private');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7,6 +7,8 @@ namespace App\Services;
|
|||||||
use App\Models\Share;
|
use App\Models\Share;
|
||||||
use App\Models\Zip;
|
use App\Models\Zip;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class SchedulerService
|
class SchedulerService
|
||||||
{
|
{
|
||||||
@@ -45,4 +47,38 @@ class SchedulerService
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get and delete failed files older than 24 hours
|
||||||
|
*/
|
||||||
|
public function delete_failed_files(): void
|
||||||
|
{
|
||||||
|
$local_disk = Storage::disk('local');
|
||||||
|
|
||||||
|
// Get all files from storage
|
||||||
|
$files = collect([
|
||||||
|
//$local_disk->allFiles('files'),
|
||||||
|
$local_disk->allFiles('chunks')
|
||||||
|
])->collapse();
|
||||||
|
|
||||||
|
$files->each(function ($file) use ($local_disk) {
|
||||||
|
|
||||||
|
// Get the file's last modification time.
|
||||||
|
$last_modified = $local_disk
|
||||||
|
->lastModified($file);
|
||||||
|
|
||||||
|
// Get diffInHours
|
||||||
|
$diff = Carbon::parse($last_modified)
|
||||||
|
->diffInHours(Carbon::now());
|
||||||
|
|
||||||
|
// Delete if file is in local storage more than 24 hours
|
||||||
|
if ($diff >= 24) {
|
||||||
|
|
||||||
|
Log::info("Failed file or chunk $file deleted.");
|
||||||
|
|
||||||
|
// Delete file from local storage
|
||||||
|
$local_disk->delete($file);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -70,4 +70,33 @@ class SchedulerTest extends TestCase
|
|||||||
Storage::disk('local')
|
Storage::disk('local')
|
||||||
->assertMissing('zip/EHWKcuvKzA4Gv29v-archive.zip');
|
->assertMissing('zip/EHWKcuvKzA4Gv29v-archive.zip');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_delete_failed_files_older_than_one_day()
|
||||||
|
{
|
||||||
|
Storage::fake('local');
|
||||||
|
|
||||||
|
$this->setup->create_directories();
|
||||||
|
|
||||||
|
$this->travel(-26)->hours();
|
||||||
|
|
||||||
|
$file = UploadedFile::fake()
|
||||||
|
->create('fake-file.zip', 2000, 'application/zip');
|
||||||
|
|
||||||
|
collect(['chunks'])
|
||||||
|
->each(function ($folder) use ($file){
|
||||||
|
Storage::putFileAs($folder, $file, 'fake-file.zip');
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->scheduler->delete_failed_files();
|
||||||
|
|
||||||
|
collect(['chunks'])
|
||||||
|
->each(function ($folder) {
|
||||||
|
Storage::disk('local')
|
||||||
|
->assertMissing("$folder/fake-file.zip");
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user