說道上傳,圖片上傳是最常見的了。比如商城的商品列表頁,都有一堆商品提供大家看來讓大家參考。有一些網(wǎng)站的新聞都會有縮略圖讓大家預(yù)覽。所以為了方便需求,tp也專門做了一個上傳相關(guān)的功能。
關(guān)于模板方面還是要啰嗦一下
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image">
</form>
use think\Request;這個是不能少的,否則后續(xù)工作會變得非常麻煩。
tp5的上傳類是以對象作為基礎(chǔ)運作的,然后分別用對象內(nèi)的方法來執(zhí)行。
// 獲取表單上傳文件 image可以改名,但要保證一致。
$file = request()->file('image');
// 移動到框架應(yīng)用根目錄/public/uploads/ 目錄下public也可以改名,如果改成upload/asd則會自動創(chuàng)建兩個文件夾。
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
這樣運行的時候就可以發(fā)現(xiàn)圖片上傳進去了。
如果失敗可以用$file->getError()來查看錯誤。
然后可以調(diào)用一下三個方法
// 輸出文件名的后綴
echo $info->getExtension();
// 輸出文件的位置以及文件名。系統(tǒng)會自動穿件以時間為名的文件夾,然后輸出文件夾的名字和圖片的名字。
echo $info->getSaveName();
// 單純輸出文件的名字
echo $info->getFilename();
上傳的東西也需要驗證,大小和類型都需要監(jiān)控一下的。
驗證規(guī)則語句
validate(['size'=>1567118,'ext'=>'jpg,png,gif'])
size是控制文件的大小,ext是控制文件后綴名,tp5還有一個參數(shù)是type,這個是控制mime類型,有興趣的可以百度一下,個人還是推薦用ext。
這里再重新說一下怎么和post數(shù)據(jù)一起寫入數(shù)據(jù)庫。
$req->post(['image'=>文件的路徑]);
然后還要生成一個縮略圖。
圖像處理需要用composer下載一個類庫。
composer require topthink/think-image
然后打開上傳的圖片
$image = \think\Image::open(request()->file('image'));
然后可以執(zhí)行個方法。crop為裁剪,thumb為縮略,flip為翻轉(zhuǎn)。
常用的還是縮略圖。
$image->thumb(150, 150,\think\Image::THUMB_FIXED)->save(ROOT_PATH . 'public/thumb/'.md5(time()).'.jpg');
其中THUMB_FIXED可以替換,共有六種。
已此圖為原例:

THUMB_SCALING.

默認的也是這個方法,單刷個人不太喜歡。因為他是保證原圖比例不變的情況下縮放,對后續(xù)排版可能會照成點麻煩。
THUMB_FILLED

這個會自動填充空白部分,保持縮略圖大小一致。還有一些其他的方法,我就不說明了,大家看效果就明白了。
THUMB_CENTER

THUMB_NORTHWEST

THUMB_SOUTHEAST

THUMB_FIXED

最后說一下水印功能
$image->water('/logo.png')->save(ROOT_PATH . 'public/thumb/'.md5(time()).'.jpg');
效果

下面的參數(shù)可以這是水印的位置。替換方法可以參考上邊的縮略圖。

圖片上傳基本方法到此結(jié)束。