laravel之上傳圖片至七牛云篇

如今的網(wǎng)站圖片量越來越大, 所以圖片不太可能存到數(shù)據(jù)庫,這樣我們就必須采取措施, 比如存到第三方的云儲(chǔ)存里,如很火的七牛云...

  1. 首先我們需要一個(gè)上傳圖片的插件,這里舉例子的插件叫 html5-fileupload。
    首先下載丟到public/vendor/下, 在有頁面提交的表單上引用該js文件,
    然后創(chuàng)建一個(gè)上傳圖片的控制器 如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'); //圖標(biāo)  這個(gè)隨你搞
    }
    error: function() {
        //如果出錯(cuò)怎么辦...
    }
}
  • ?再看控制器里的代碼
 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的絕對(duì)路徑 里面放的直接丟在后面
            $filePath = storage_path('app/'.$path);

            //上傳到七牛
            qiniu_upload($filePath);  //調(diào)用的全局函數(shù)

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

        }
    }
  • ? 控制器后面可能有些不知道的 先來安裝七牛
    在命令行打
composer require qiniu/php-sdk

跑完后, 我們就可以寫一個(gè)全局函數(shù)了,在Http/Helpers下創(chuàng)建一個(gè)qiniu.php 內(nèi)容如下:


// 引入鑒權(quán)類
use Qiniu\Auth;
// 引入上傳類
use Qiniu\Storage\UploadManager;

function qiniu_upload($filePath) {


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

// 構(gòu)建鑒權(quán)對(duì)象
    $auth = new Auth($accessKey, $secretKey);

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

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

// 上傳到七牛后保存的文件名
    $key = basename($filePath);

// 初始化 UploadManager 對(duì)象并進(jìn)行文件的上傳。
    $uploadMgr = new UploadManager();

// 調(diào)用 UploadManager 的 putFile 方法進(jìn)行文件的上傳。
    $uploadMgr->putFile($token, $key, $filePath);
//刪除本地圖片
    unlink($filePath);
}

然而全局函數(shù)可能并沒有加載到composer.json里去
我們需要打開composer.json


composer.json

然后我們重新加載這個(gè)
命令行輸入

composer dump-autoload

這樣函數(shù)就加載成功了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容