图片上传,多图,上传回调,内置上传等.

浏览:1288 发布日期:2017/09/22 分类:ThinkPHP5专区 关键字: 上传,内置,TP
在TP中, 本身有内置图片上传方法.与多图上传方法.这个没什么好讲的. 只要提交. 后端处理就可以了.
说一说,上传回调.百度一搜图片上传, 有很多比如webuploader,layer等等.各式各样的

TP5实战群:316497602

扒一扒对上传的理解. TP内置的上传. 是在选择完图片, 点击提交按钮. 传到服务器上再写入数据库. 而插件上传, 是先将图片传到服务器上, 回调一个地址,通过地址可以显示此图片.

内置上传好处 : 内置上传是不会有冗余图片, 只要提交了, 就会处理入库.
内置上传坏处 : 没有图片回调, 无法进行图片显示.

插件上传好处 : 厉害了, 可以回调图片. 点击上传直接传服务器就可以回调显示.
插件上传坏处 : 也很厉害, 就是多次点击上传的时候图片冗余很多. 各有特色咯

搞一搞内置上传.
提示: 内置上传在from表单必须加enctype="multipart/form-data"

单图上传表单: <input type="file" name="single_img" >
多图上传表单: <input type="file" name="figure[]" >

单图上传操作: single_img是官方图片处理的方法. 也是插件.只是我封装了而已.
$single = '';

$file = request()->file('single_img');

if (true !== $this->validate(['image' => $file], ['image' => 'require|image'])) {
//此处用json返回也可以.
$this->error('请选择图像文件');
} else {
//single_img放在application/admin/common.php
$single = single_img(3,$file,'','','','','back');
}
多图上传操作: 多图上传, 相比单图是多一层循环, 就是每个都上传一次.跟单图没有其他的区别了.
$image = [];

$figure = request()->file('figure');

foreach($figure as $file){

if (true !== $this->validate(['image' => $file], ['image' => 'require|image'])) {
//此处用json返回也可以.
$this->error('请选择图像文件');

} else {

$image[] = single_img(3,$file,'','','','','back');

}

}

这个是single_img封装的图片处理方法.丢在了application/admin/common.php文件.可以再外层公用. 只是我只有一个admin后台模块, 没必要丢在最外层.

use think\Image;
use think\Request;
/**
* [single_img description]
* @param integer $type [类型, 默认为图片裁剪]
* @param string $file [图片地址,上传来的图片地址.]
* @param integer $width [宽度,裁剪跟缩略图使用一个]
* @param integer $height [高度,裁剪跟缩略图使用一个]
* @param string $watermark [水印图片地址,默认为我设置的图片]
* @param string $word [文字水印的内容.]
* @param string $url [图片存放路径,由于参数无法放函数.所以我用一个判断进行执行. 这个是7的问题.暂时不研究]
* @return [type] [description]
*/
function single_img($type=1,$file='',$width=300,$height=300,$watermark='./public/common/img/logo.png',$word='www.bcahz.com',$url=''){
if($file){
if($url == ''){
$url = date("Ymd");
}
// 读取图片
$image = Image::open($file);
// 图片处理
switch ($type) {
case 1: // 图片裁剪
$image->crop($width, $height);
break;
case 2: // 缩略图
$image->thumb($width, $height, Image::THUMB_CENTER);
break;
case 3: // 垂直翻转
$image->flip();
break;
case 4: // 水平翻转
$image->flip(Image::FLIP_Y);
break;
case 5: // 图片旋转
$image->rotate();
break;
case 6: // 图片水印
$image->water($watermark, Image::WATER_NORTHWEST, 50);
break;
case 7: // 文字水印
$image->text($word, VENDOR_PATH . 'topthink/think-captcha/assets/ttfs/HYQingKongTiJ.ttf', 20, '#refeee');
break;
}
// 保存图片(以当前时间戳)
// /public/uploads/ 可以用config.get()进行设置, 这样的话, 不管oss或者本地图片路径都可以解决.
$saveName = request()->time().rand_string(6,1) . '.png';
$image->save(ROOT_PATH . '/public/uploads/'.$url.'/' . $saveName);
} else {
return false;
}
return '/public/uploads/'.$url.'/' . $saveName;
}

这章只处理TP内置上传. 下一章处理插件上传.
最佳答案
评论( 相关
后面还有条评论,点击查看>>