Skip to content

Commit d8b2a49

Browse files
authored
Filepond model in config not acknowledged by driver fixed 🐛 (#80)
1 parent 26697bd commit d8b2a49

File tree

8 files changed

+70
-45
lines changed

8 files changed

+70
-45
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to `laravel-filepond` will be documented in this file.
44

5+
## 12.3.2 - 2025-10-01
6+
7+
- Filepond model in config not acknowledged by driver fixed. 🐛
8+
59
## 12.3.1 - 2025-09-20
610

711
- Added full chunk upload support for S3 storage. ✨

src/Console/FilepondClear.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ public function handle()
4747

4848
if ($this->option('all')) {
4949
if ($this->confirm('Are you sure?', true)) {
50-
$model::truncate();
51-
$this->info('Fileponds table truncated.');
5250
Storage::disk($tempDisk)->deleteDirectory($tempFolder);
5351
$this->info('Temporary files and folders deleted.');
52+
$model::truncate();
53+
$this->info('Fileponds table truncated.');
5454

5555
return 0;
5656
}
@@ -64,7 +64,7 @@ public function handle()
6464
if ($expiredFiles->count() > 0) {
6565
foreach ($expiredFiles->get() as $expiredFile) {
6666
Storage::disk($tempDisk)->delete($expiredFile->filepath);
67-
Storage::disk($tempDisk)->deleteDirectory($tempFolder.DIRECTORY_SEPARATOR.$expiredFile->id);
67+
Storage::disk($tempDisk)->deleteDirectory($tempFolder.'/'.$expiredFile->id);
6868
}
6969
$this->info('Temporary files and folders deleted.');
7070
$expiredFiles->forceDelete();

src/Contracts/ChunkProcessor.php renamed to src/Contracts/UploaderInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66

77
use Illuminate\Http\Request;
88

9-
interface ChunkProcessor
9+
interface UploaderInterface
1010
{
1111
public function initChunkUpload(Request $request): string;
1212

1313
public function handleChunk(Request $request): int;
1414

1515
public function calculateOffset(Request $request): int;
16+
17+
public function deleteFile(Request $request): bool;
1618
}

src/Drivers/LocalChunkProcessor.php renamed to src/Drivers/LocalUploadDriver.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
use Illuminate\Http\Request;
88
use Illuminate\Support\Facades\Crypt;
99
use Illuminate\Support\Facades\Storage;
10-
use RahulHaque\Filepond\Contracts\ChunkProcessor;
10+
use RahulHaque\Filepond\Contracts\UploaderInterface;
1111
use RahulHaque\Filepond\Exceptions\InvalidChunkException;
12-
use RahulHaque\Filepond\Models\Filepond;
1312

14-
class LocalChunkProcessor implements ChunkProcessor
13+
class LocalUploadDriver implements UploaderInterface
1514
{
1615
public function initChunkUpload(Request $request): string
1716
{
18-
$filepond = Filepond::create([
17+
$filepond = config('filepond.model')::create([
1918
'filepath' => '',
2019
'filename' => '',
2120
'extension' => '',
@@ -70,7 +69,7 @@ public function handleChunk(Request $request): int
7069
}
7170
fclose($file);
7271

73-
$filepond = Filepond::findOrFail($id);
72+
$filepond = config('filepond.model')::findOrFail($id);
7473

7574
$filepond->update([
7675
'filepath' => config('filepond.temp_folder').DIRECTORY_SEPARATOR.$id.DIRECTORY_SEPARATOR.$uploadName,
@@ -86,7 +85,7 @@ public function handleChunk(Request $request): int
8685
public function calculateOffset(Request $request): int
8786
{
8887
$id = Crypt::decrypt($request->patch)['id'];
89-
$filepond = Filepond::findOrFail($id);
88+
$filepond = config('filepond.model')::findOrFail($id);
9089
$dir = Storage::disk(config('filepond.temp_disk'))->path(config('filepond.temp_folder').DIRECTORY_SEPARATOR.$filepond->id.DIRECTORY_SEPARATOR);
9190

9291
$size = 0;
@@ -97,4 +96,20 @@ public function calculateOffset(Request $request): int
9796

9897
return $size;
9998
}
99+
100+
public function deleteFile(Request $request): bool
101+
{
102+
$id = Crypt::decrypt($request->getContent())['id'];
103+
104+
$filepond = config('filepond.model')::findOrFail($id);
105+
106+
if (config('filepond.soft_delete', true)) {
107+
return $filepond->delete();
108+
}
109+
110+
Storage::disk(config('filepond.temp_disk'))->delete($filepond->filepath);
111+
Storage::disk(config('filepond.temp_disk'))->deleteDirectory(config('filepond.temp_folder').DIRECTORY_SEPARATOR.$filepond->id);
112+
113+
return $filepond->forceDelete();
114+
}
100115
}

src/Drivers/S3ChunkProcessor.php renamed to src/Drivers/S3UploadDriver.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
use Illuminate\Support\Facades\Crypt;
1111
use Illuminate\Support\Facades\Storage;
1212
use Illuminate\Support\Str;
13-
use RahulHaque\Filepond\Contracts\ChunkProcessor;
13+
use RahulHaque\Filepond\Contracts\UploaderInterface;
1414
use RahulHaque\Filepond\Exceptions\InvalidChunkException;
15-
use RahulHaque\Filepond\Models\Filepond;
1615

17-
class S3ChunkProcessor implements ChunkProcessor
16+
class S3UploadDriver implements UploaderInterface
1817
{
1918
private S3Client $client;
2019

@@ -25,7 +24,7 @@ public function __construct()
2524

2625
public function initChunkUpload(Request $request): string
2726
{
28-
$filepond = Filepond::create([
27+
$filepond = config('filepond.model')::create([
2928
'filepath' => '',
3029
'filename' => Str::uuid().'.tmp',
3130
'extension' => '',
@@ -53,7 +52,7 @@ public function initChunkUpload(Request $request): string
5352
public function handleChunk(Request $request): int
5453
{
5554
$id = Crypt::decrypt($request->patch)['id'];
56-
$filepond = Filepond::findOrFail($id);
55+
$filepond = config('filepond.model')::findOrFail($id);
5756
$key = config('filepond.temp_folder').'/'.$filepond->id.'/'.$filepond->filename;
5857

5958
$contentLength = (int) $request->header('Content-Length');
@@ -142,11 +141,27 @@ public function handleChunk(Request $request): int
142141
public function calculateOffset(Request $request): int
143142
{
144143
$id = Crypt::decrypt($request->patch)['id'];
145-
$filepond = Filepond::findOrFail($id);
144+
$filepond = config('filepond.model')::findOrFail($id);
146145

147146
return array_sum(array_column($filepond->upload_tags ?? [], 'Size'));
148147
}
149148

149+
public function deleteFile(Request $request): bool
150+
{
151+
$id = Crypt::decrypt($request->getContent())['id'];
152+
153+
$filepond = config('filepond.model')::findOrFail($id);
154+
155+
if (config('filepond.soft_delete', true)) {
156+
return $filepond->delete();
157+
}
158+
159+
Storage::disk(config('filepond.temp_disk'))->delete($filepond->filepath);
160+
Storage::disk(config('filepond.temp_disk'))->deleteDirectory(config('filepond.temp_folder').'/'.$filepond->id);
161+
162+
return $filepond->forceDelete();
163+
}
164+
150165
/**
151166
* Checks the chunk size and file size for S3 compatibility.
152167
* Returns string with reason why upload is incompatible.

src/Factories/ChunkUploadManager.php renamed to src/Factories/FileUploaderManager.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
use Illuminate\Support\Manager;
88
use InvalidArgumentException;
9-
use RahulHaque\Filepond\Contracts\ChunkProcessor;
10-
use RahulHaque\Filepond\Drivers\LocalChunkProcessor;
11-
use RahulHaque\Filepond\Drivers\S3ChunkProcessor;
9+
use RahulHaque\Filepond\Contracts\UploaderInterface;
10+
use RahulHaque\Filepond\Drivers\LocalUploadDriver;
11+
use RahulHaque\Filepond\Drivers\S3UploadDriver;
1212

13-
class ChunkUploadManager extends Manager
13+
class FileUploaderManager extends Manager
1414
{
1515
public function getDefaultDriver(): ?string
1616
{
@@ -45,13 +45,13 @@ protected function getDriverFromDisk(?string $disk): ?string
4545
return $this->config->get('filesystems.disks.'.$disk.'.driver');
4646
}
4747

48-
protected function createLocalDriver(): ChunkProcessor
48+
protected function createLocalDriver(): UploaderInterface
4949
{
50-
return $this->container->make(LocalChunkProcessor::class);
50+
return $this->container->make(LocalUploadDriver::class);
5151
}
5252

53-
protected function createS3Driver(): ChunkProcessor
53+
protected function createS3Driver(): UploaderInterface
5454
{
55-
return $this->container->make(S3ChunkProcessor::class);
55+
return $this->container->make(S3UploadDriver::class);
5656
}
5757
}

src/FilepondServiceProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Illuminate\Support\ServiceProvider;
99
use Illuminate\Validation\Rule;
1010
use RahulHaque\Filepond\Console\FilepondClear;
11-
use RahulHaque\Filepond\Factories\ChunkUploadManager;
11+
use RahulHaque\Filepond\Factories\FileUploaderManager;
1212
use RahulHaque\Filepond\Rules\FilepondRule;
1313

1414
class FilepondServiceProvider extends ServiceProvider
@@ -46,7 +46,7 @@ public function register()
4646
{
4747
$this->mergeConfigFrom(__DIR__.'/../config/filepond.php', 'filepond');
4848

49-
$this->app->singleton(ChunkUploadManager::class, fn (Application $app) => new ChunkUploadManager($app));
49+
$this->app->singleton(FileUploaderManager::class, fn (Application $app) => new FileUploaderManager($app));
5050

5151
$this->app->singleton('filepond', fn () => new Filepond);
5252
}

src/Services/FilepondService.php

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Illuminate\Support\Facades\Crypt;
1010
use Illuminate\Support\Facades\Storage;
1111
use Illuminate\Support\Facades\Validator;
12-
use RahulHaque\Filepond\Factories\ChunkUploadManager;
12+
use RahulHaque\Filepond\Factories\FileUploaderManager;
1313
use RahulHaque\Filepond\Models\Filepond;
1414
use Throwable;
1515

@@ -23,15 +23,15 @@ class FilepondService
2323

2424
private $model;
2525

26-
private $chunkUploadManager;
26+
private $uploader;
2727

28-
public function __construct(ChunkUploadManager $chunkUploadManager)
28+
public function __construct(FileUploaderManager $uploader)
2929
{
3030
$this->disk = config('filepond.disk', 'public');
3131
$this->tempDisk = config('filepond.temp_disk', 'local');
3232
$this->tempFolder = config('filepond.temp_folder', 'filepond/temp');
3333
$this->model = config('filepond.model', Filepond::class);
34-
$this->chunkUploadManager = $chunkUploadManager;
34+
$this->uploader = $uploader;
3535
}
3636

3737
/**
@@ -75,7 +75,7 @@ public function store(Request $request)
7575
*/
7676
public function initChunk(Request $request)
7777
{
78-
return $this->chunkUploadManager->driver($this->tempDisk)->initChunkUpload($request);
78+
return $this->uploader->initChunkUpload($request);
7979
}
8080

8181
/**
@@ -87,7 +87,7 @@ public function initChunk(Request $request)
8787
*/
8888
public function chunk(Request $request)
8989
{
90-
return $this->chunkUploadManager->driver($this->tempDisk)->handleChunk($request);
90+
return $this->uploader->handleChunk($request);
9191
}
9292

9393
/**
@@ -97,7 +97,7 @@ public function chunk(Request $request)
9797
*/
9898
public function offset(Request $request)
9999
{
100-
return $this->chunkUploadManager->driver($this->tempDisk)->calculateOffset($request);
100+
return $this->uploader->calculateOffset($request);
101101
}
102102

103103
/**
@@ -121,18 +121,7 @@ public function restore(string $content)
121121
*/
122122
public function delete(Request $request)
123123
{
124-
$id = Crypt::decrypt($request->getContent())['id'];
125-
126-
$filepond = $this->model::findOrFail($id);
127-
128-
if (config('filepond.soft_delete', true)) {
129-
return $filepond->delete();
130-
}
131-
132-
Storage::disk($this->tempDisk)->delete($filepond->filepath);
133-
Storage::disk($this->tempDisk)->deleteDirectory($this->tempFolder.DIRECTORY_SEPARATOR.$filepond->id);
134-
135-
return $filepond->forceDelete();
124+
return $this->uploader->deleteFile($request);
136125
}
137126

138127
/**

0 commit comments

Comments
 (0)