前提・実現したいこと
Laravel5.8において、入力フォームに画像のURLを入力しpostし、そのurlから画像データを取得してS3に保存したいです。
入力フォームで画像ファイルを選択して、それをController側でS3に保存することにはすでに成功しています。
今回は、画像ファイルではなくて画像URLを入力することでController側からS3に保存することを実現したいです。
また、前提としてフォームに入力する画像URLはpublic公開されているものです。
該当のソースコード
まずは成功している「画像ファイル」経由のアップロードのソースコードを添付します。
// upload_file.blade.php <h3>画像ファイルをアップロード</h3> <form method="post" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="file"> <button type="submit">保存</button> </form>
// ThumbnailController.php // ファイルのインスタンスを取得する $file = $request->file('file'); //現在のUnixタイムスタンプを利用してファイル名をつける $file_name = time(); //ファイルのリサイズを行う Image::make($file)->resize(300,188)->save(); // 第一引数はS3での保存ディレクトリの指定、第二引数はファイル、第三引数はファイル名、第四引数はpublickを指定することで、URLによるアクセスが可能となる Storage::disk('s3')->putFileAs('/', $file, $file_name, 'public'); return redirect('/');
続いて、今やろうとしていて失敗している、「画像URL」経由のコードを添付します。
// upload_url.blade.php <h3>画像URLをアップロード</h3> <form method="post"> {{ csrf_field() }} <input name="url"> <button type="submit">保存</button> </form>
// ThumbnailController.php // 画像を取得する $image = file_get_contents($request->input('url')); //現在のUnixタイムスタンプを利用してファイル名をつける $file_name = time(); //ファイルのリサイズを行う Image::make($image)->resize(300,188)->save(); // 第一引数はS3での保存ディレクトリの指定、第二引数はファイル、第三引数はファイル名、第四引数はpublickを指定することで、URLによるアクセスが可能となる Storage::disk('s3')->putFileAs('/', $image, $file_name, 'public'); return redirect('/');
エラーコード
画像URL経由ではこのようなエラーがでます。
Intervention \ Image \ Exception \ NotWritableException Can't write to undefined path.
また、以下のコードに問題があることがわかっています。
Image::make($image)->resize(300,188)->save();
補足情報(FW/ツールのバージョンなど)
Amazon Linux
PHP 7.2.13
Laravel 5.8

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。