Skip to content

Commit ea3be46

Browse files
committed
added the ability to specify storage disks
1 parent dcec2e3 commit ea3be46

16 files changed

+107
-96
lines changed

config/file-storage.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
'queue' => env('FILE_STORAGE_QUEUE', 'media'),
77
'max_dimension' => env('FILE_STORAGE_MAX_DIMENSION', 2000),
88
'preview_dimension' => env('FILE_STORAGE_PREVIEW_DIMENSION', 300),
9+
'generate_preview' => env('FILE_STORAGE_GENERATE_PREVIEW', true),
910
];

database/factories/MediaFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?php
2-
32
declare(strict_types=1);
43

54
namespace Imahmood\FileStorage\Database\Factories;
@@ -20,6 +19,7 @@ class MediaFactory extends Factory
2019
public function definition(): array
2120
{
2221
return [
22+
'disk' => 'public',
2323
'model_type' => 'App/Models/User',
2424
'model_id' => 1,
2525
'file_name' => 'fake-file.jpg',

database/migrations/2023_09_20_093751_create_medias.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?php
2-
32
declare(strict_types=1);
43

54
use Illuminate\Database\Migrations\Migration;

database/migrations/2023_11_20_110518_update_media.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?php
2-
32
declare(strict_types=1);
43

54
use Illuminate\Database\Migrations\Migration;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
use Illuminate\Database\Migrations\Migration;
5+
use Illuminate\Database\Schema\Blueprint;
6+
use Illuminate\Support\Facades\Schema;
7+
8+
return new class extends Migration
9+
{
10+
/**
11+
* Run the migrations.
12+
*/
13+
public function up(): void
14+
{
15+
Schema::table('media', function (Blueprint $table) {
16+
$table->string('disk')->after('id');
17+
});
18+
}
19+
20+
/**
21+
* Reverse the migrations.
22+
*/
23+
public function down(): void
24+
{
25+
Schema::table('media', function (Blueprint $table) {
26+
$table->dropColumn('disk');
27+
});
28+
}
29+
};

lang/en/media.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?php
2-
32
declare(strict_types=1);
43

54
return [

lang/fa/media.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?php
2-
32
declare(strict_types=1);
43

54
return [

src/Config/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public function __construct(
1010
public readonly string $queueName,
1111
public readonly int $maxDimension,
1212
public readonly int $previewDimension,
13+
public readonly bool $generatePreview,
1314
) {
1415
}
1516
}

src/Config/ConfigurationFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public static function create(array $data): Configuration
1212
queueName: $data['queue'],
1313
maxDimension: $data['max_dimension'],
1414
previewDimension: $data['preview_dimension'],
15+
generatePreview: (bool) $data['generate_preview'],
1516
);
1617
}
1718
}

src/FileManipulator.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace Imahmood\FileStorage;
55

6+
use Illuminate\Support\Facades\Storage;
67
use Imahmood\FileStorage\Config\Configuration;
78
use Imahmood\FileStorage\Exceptions\NotWritableException;
89
use Imahmood\FileStorage\Models\Media;
@@ -27,8 +28,8 @@ public function optimizeImage(Media $media): void
2728
}
2829

2930
$this->resizeImage(
30-
sourceFile: $media->original_absolute_path,
31-
targetFile: $media->original_absolute_path,
31+
media: $media,
32+
targetFile: $media->original_relative_path,
3233
maxDimension: $this->config->maxDimension,
3334
);
3435
}
@@ -47,8 +48,8 @@ public function generatePreview(Media $media): void
4748
$previewName = $this->generatePreviewName($media->file_name);
4849

4950
$this->resizeImage(
50-
sourceFile: $media->original_absolute_path,
51-
targetFile: $media->dir_absolute_path.$previewName,
51+
media: $media,
52+
targetFile: $media->dir_relative_path.$previewName,
5253
maxDimension: $this->config->previewDimension,
5354
);
5455

@@ -67,17 +68,19 @@ protected function generatePreviewName(string $fileName): string
6768
* @throws \Imahmood\FileStorage\Exceptions\NotWritableException
6869
* @throws \Jcupitt\Vips\Exception
6970
*/
70-
protected function resizeImage(string $sourceFile, string $targetFile, int $maxDimension): void
71+
protected function resizeImage(Media $media, string $targetFile, int $maxDimension): void
7172
{
72-
$image = VipsImage::newFromFile($sourceFile);
73+
$image = VipsImage::newFromBuffer(
74+
Storage::disk($media->disk)->get($media->original_relative_path)
75+
);
7376

7477
$width = min($image->width, $maxDimension);
7578
$height = min($image->height, $maxDimension);
7679
$fileExt = pathinfo($targetFile, PATHINFO_EXTENSION);
7780

78-
$saved = file_put_contents(
79-
$targetFile,
80-
$image->thumbnail_image($width, ['height' => $height])->writeToBuffer('.'.$fileExt)
81+
$saved = Storage::disk($media->disk)->put(
82+
path: $targetFile,
83+
contents: $image->thumbnail_image($width, ['height' => $height])->writeToBuffer('.'.$fileExt),
8184
);
8285

8386
$image = null;

0 commit comments

Comments
 (0)