iT邦幫忙

第 11 屆 iThome 鐵人賽

0
Software Development

後端基礎PHP+Mysql & Laravel 30日養成計畫系列 第 31

Day 31 用Laravel儲存圖片

第一步:安裝套件Intervention

cd進專案目錄:

$composer require intervention/image

第二步:修改Laravel檔案

先在migration中建立儲存圖片url的欄位:

 $table->string('image')->nullable();

model的$fillable[]也記得要加上'image'這個欄位。
table中建立好欄位後,進入你的專案,在config/app.php中$providers這個array裡加上:

Intervention\Image\ImageServiceProvider::class

在下面的$aliases這個array裡加上:

'Image' => Intervention\Image\Facades\Image::class

第三步:建立上傳資料夾與storage資料夾的連結

在專案目錄底下:

$php artisan storage:link

連結之後,project/storage/app/public 會跟 project/public/storage這兩個資料夾就回相連

第四步:驗證client端是否有上傳圖片檔案並回傳取得圖片的URL


use Intervention\Image\ImageManagerStatic as Image;  //在檔案開頭的namespace加上

  $request->validate([
         'item' => ['required', 'unique:items'],
         'image' => ['required', 'mimes:jpg,jpeg,bmp,png'],
  ]);
$parameters = request()->all();

if (request()->hasFile('image'))
{
    // 檔案存在,所以存到project/storage/app/public,並拿到url,此範例會拿到public/fileName
    $imageURL = request()->file('image')->store('public');
    // 儲存純『檔名』到資料庫,因此把前面路徑修剪掉
    $parameters['image'] = substr($imageURL, 7);
}
$create = Item::create([ 
           'item' => $request['item'],
           'image' => $parameters['image'],
]);
$result = $create->toArray();
if ($parameters['image'] != null){
    $result['imageURL'] = asset('storage/' . $parameters['image']);
 }
 if ($create) {
         return response()->json($result, 200);
}

上一篇
Day 30 Laravel 5.8 會員註冊及登入系統API: Middelware、Router、 PostMan 測試
下一篇
Day 32 資料庫正規化(一~三)
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言