axiosでPOSTした画像をLaravel APIでDBに保存するプログラム以下を書きました。
vue.js単一コンポーネント、画像POST用のscriptコード
javascript
1Vue.js 2 3 // Canvasのデータをblob化 4 saveCanvas: function (canvas_id) { 5 const type = "image/png"; 6 const canvas = document.getElementById(canvas_id); 7 const dataurl = canvas.toDataURL("image/jpeg", 0.85); 8 const bin = atob(dataurl.split(",")[1]); 9 const buffer = new Uint8Array(bin.length); 10 for (let i = 0; i < bin.length; i++) { 11 buffer[i] = bin.charCodeAt(i); 12 } 13 14 const blob = new Blob([buffer.buffer], { type: type }); 15 16 const data = new FormData(); 17 data.append("images", blob, "image.png"); 18 // data.append("file", this.file); 19 20 //'path'というkeyで保存 21 axios.post("/api/images", data) 22 .then((res) => { 23 console.log("success"); 24 }) 25 .catch((error) => { 26 new Error(error); 27 }); 28 }, 29 }
コントローラー(ImageController.php)
PHP
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Image; 7 8class ImageApiController extends Controller 9{ 10 public function store(Request $request) 11 { 12 if (request()->file) { 13 $file_name = time() . '.' . request()->file->getClientOriginalName(); 14 request()->file->storeAs('public', $file_name); 15 16 $image = new Image(); 17 $image->path = 'storage/' . $file_name; 18 $image->save(); 19 20 } 21}
モデルファイル(image.php)
PHP
1class Image extends Model 2{ 3 // 4 protected $fillable = [ 5 'path', 6 ]; 7}
マイグレーションファイル
PHP
1 public function up() 2 { 3 Schema::create('images', function (Blueprint $table) { 4 $table->bigIncrements('id'); 5 $table->string('path'); 6 $table->timestamps(); 7 }); 8 }
vue.js単一コンポーネント、画像POST用のscriptコードで
canvasに画像を描画し、blobデータを作成
blobをformDataにappendして、axiosでPOST
POSTされたblobファイルを、Laravel API側で処理・保存
コントローラー(ImageController.php)で画像をstorage/app/images/
に画像保存
というプログラムを書きました。
画像の投稿(axios.post)が完了すると、コンソールには'success'と文字が返って来ているので、axios.postは完了していると思っています。
コンソールや、debugbarにエラーは出ないのに画像がDBに保存されません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/15 07:14
2021/12/15 09:02
2021/12/15 09:08
2021/12/15 09:46
2021/12/17 08:32