Laravelで画像アップロード処理を実装したいのですが、
フロント側まだ作ってないので、テストを作って裏側だけで画像アップロードの挙動を確認したのでその流れを残しておきます。
テスト作成
$ php artisan make:test ImageUploadTest
テストコード
class ImageUploadTest extends TestCase
{
public function testUploadImage()
{
//フェイクディスクの作成
//storage/framework/testing/disks/designに保存用ディスクが作成される
//(指定しなければdesignではなくlocalフォルダが保存用に使用される)
Storage::fake('design'); // テスト後ファイルは削除される
// Storage::persistentFake('design'); テスト後も画像ファイルが残る
// 画像アップロード用サービスクラス作成(僕はS3にアップロード)
$imageService = new ImageService(new S3ImageUploader);
// UploadedFileクラス用意
$uploadedFile = UploadedFile::fake()->image('design.jpg');
// 作成した画像を移動
// 移動しない場合は /private/var/folders/sf/hfbkqhw17xz_cgzwd5xhp7nm0000gn/T/phprqilrq みたいなパスに保存されてた
$uploadedFile->move('storage/framework/testing/disks/design');
// S3にアップロードする処理
$imageService->upload($uploadedFile);
// storage/framework/testing/disks/design内に該当ファイルが存在するか
// S3にアップロードされたかはS3のバケットを確認しました。
Storage::disk('design')->assertExists($uploadedFile->getFilename());
}
}
個人的にはこれで仮画像作成してくれんのが便利だなーと思いました。
$uploadedFile = UploadedFile::fake()->image('design.jpg');
S3へのアップロードはこちらを参考
PHPでAWSのS3に画像アップロード&画像を画面表示(設定〜実装まで)