说道上传,图片上传是最常见的了。比如商城的商品列表页,都有一堆商品提供大家看来让大家参考。有一些网站的新闻都会有缩略图让大家预览。所以为了方便需求,tp也专门做了一个上传相关的功能。
关于模板方面还是要啰嗦一下
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image">
</form>
use think\Request;这个是不能少的,否则后续工作会变得非常麻烦。
tp5的上传类是以对象作为基础运作的,然后分别用对象内的方法来执行。
// 获取表单上传文件 image可以改名,但要保证一致。
$file = request()->file('image');
// 移动到框架应用根目录/public/uploads/ 目录下public也可以改名,如果改成upload/asd则会自动创建两个文件夹。
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
这样运行的时候就可以发现图片上传进去了。
如果失败可以用$file->getError()来查看错误。
然后可以调用一下三个方法
// 输出文件名的后缀
echo $info->getExtension();
// 输出文件的位置以及文件名。系统会自动穿件以时间为名的文件夹,然后输出文件夹的名字和图片的名字。
echo $info->getSaveName();
// 单纯输出文件的名字
echo $info->getFilename();
上传的东西也需要验证,大小和类型都需要监控一下的。
验证规则语句
validate(['size'=>1567118,'ext'=>'jpg,png,gif'])
size是控制文件的大小,ext是控制文件后缀名,tp5还有一个参数是type,这个是控制mime类型,有兴趣的可以百度一下,个人还是推荐用ext。
这里再重新说一下怎么和post数据一起写入数据库。
$req->post(['image'=>文件的路径]);
然后还要生成一个缩略图。
图像处理需要用composer下载一个类库。
composer require topthink/think-image
然后打开上传的图片
$image = \think\Image::open(request()->file('image'));
然后可以执行个方法。crop为裁剪,thumb为缩略,flip为翻转。
常用的还是缩略图。
$image->thumb(150, 150,\think\Image::THUMB_FIXED)->save(ROOT_PATH . 'public/thumb/'.md5(time()).'.jpg');
其中THUMB_FIXED可以替换,共有六种。
已此图为原例:
THUMB_SCALING.
默认的也是这个方法,单刷个人不太喜欢。因为他是保证原图比例不变的情况下缩放,对后续排版可能会照成点麻烦。
THUMB_FILLED
这个会自动填充空白部分,保持缩略图大小一致。还有一些其他的方法,我就不说明了,大家看效果就明白了。
THUMB_CENTER
THUMB_NORTHWEST
THUMB_SOUTHEAST
THUMB_FIXED
最后说一下水印功能
$image->water('/logo.png')->save(ROOT_PATH . 'public/thumb/'.md5(time()).'.jpg');
效果
下面的参数可以这是水印的位置。替换方法可以参考上边的缩略图。
图片上传基本方法到此结束。