如今的網站圖片量越來越大, 所以圖片不太可能存到資料庫,這樣我們就必須採取措施, 比如存到第三方的雲儲存裡,如很火的七牛雲...
- 首先我們需要一個上傳圖片的外掛,這裡舉例子的外掛叫 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 dump-autoload
複製程式碼
這樣函式就載入成功了。