Laravel——圖片上傳之七牛雲

劍歌丶君發表於2018-04-13

如今的網站圖片量越來越大, 所以圖片不太可能存到資料庫,這樣我們就必須採取措施, 比如存到第三方的雲儲存裡,如很火的七牛雲...

  1. 首先我們需要一個上傳圖片的外掛,這裡舉例子的外掛叫 html5-fileupload。 首先下載丟到public/vendor/下, 在有頁面提交的表單上引用該js檔案, 然後建立一個上傳圖片的控制器 如photoController.php
  •  先看js的程式碼
var options = {
    type: 'POST',
    url: '填你控制器的地址',
    beforeupload: function() {
        //上傳成功之前的行為
    },
    success: function(res) {
        if(res.status == 0) {
            alert(res.msg);
            return false
        }
        $("input[name='image']").val(res.msg);  //將圖片表單的值改為成功上傳的路徑
        $("#img_show").attr("src", res.msg);  //將顯示圖片的地址改為成功上傳圖片的路徑
        $("#loading").attr('class', 'am-icon-cloud-upload'); //圖示  這個隨你搞
    }
    error: function() {
        //如果出錯怎麼辦...
    }
}
複製程式碼
  •  再看控制器裡的程式碼
 public function store(Request $request) {
        if($request->hasFile('image') && $request->image->isValid()) {
            $allow_types = ['image/png', 'image/jpeg', 'image/gif', 'image/jpg'];
            if(!in_array($request->image->getMiMeType(), $allow_types)) {
                return ['status'=> 0, 'msg'=> '圖片型別不正確!'];
            }
            if($request->image->getClientSize() > 1024 * 1024 * 3) {
                return ['status'=> 0, 'msg'=>'圖片大小不能超過 3M'];
            }
            $path = $request->image->store('public/images');
//            //上傳到本地
//            return ['status'=> 1, 'msg'=>'/storage'.str_replace('public', '', $path)];

            //storage_path返回根目錄下的storage的絕對路徑 裡面放的直接丟在後面
            $filePath = storage_path('app/'.$path);

            //上傳到七牛
            qiniu_upload($filePath);  //呼叫的全域性函式

            //返回
            return ['status'=> 1, 'msg'=> 'http://ow7pezvrt.bkt.clouddn.com/'.basename($filePath)];

        }
    }
複製程式碼
  •   控制器後面可能有些不知道的 先來安裝七牛 在命令列打
composer require qiniu/php-sdk
複製程式碼

跑完後, 我們就可以寫一個全域性函式了,在Http/Helpers下建立一個qiniu.php 內容如下:


// 引入鑑權類
use Qiniu\Auth;
// 引入上傳類
use Qiniu\Storage\UploadManager;

function qiniu_upload($filePath) {


// 需要填寫你的 Access Key 和 Secret Key
    $accessKey = "edj5WTd-8sURwN4qZD3YE2U9TDL4skSugNO6yevp";
    $secretKey = "4o06NtzXmP0Tu0F8P77Lk4oHSO40zYMae7yXHmUl";
    $bucket = "shop";

// 構建鑑權物件
    $auth = new Auth($accessKey, $secretKey);

// 生成上傳 Token
    $token = $auth->uploadToken($bucket);

// 要上傳檔案的本地路徑
//    $filePath = './php-logo.png';

// 上傳到七牛後儲存的檔名
    $key = basename($filePath);

// 初始化 UploadManager 物件並進行檔案的上傳。
    $uploadMgr = new UploadManager();

// 呼叫 UploadManager 的 putFile 方法進行檔案的上傳。
    $uploadMgr->putFile($token, $key, $filePath);
//刪除本地圖片
    unlink($filePath);
}
複製程式碼

然而全域性函式可能並沒有載入到composer.json裡去 我們需要開啟composer.json

composer.json
然後我們重新載入這個 命令列輸入

composer dump-autoload
複製程式碼

這樣函式就載入成功了。

相關文章