如今的網(wǎng)站圖片量越來越大, 所以圖片不太可能存到數(shù)據(jù)庫,這樣我們就必須采取措施, 比如存到第三方的云儲(chǔ)存里,如很火的七牛云...
- 首先我們需要一個(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ù)就加載成功了。