这几天在做网站的多图修改与上传, 单图的修改和上传, 所以封装了几个类 希望指正:
这个是针对thinkphp3.2.3 的.
/**
* 上传图片封装
* @param str $imgname 图片参数名字
* @param str $dirname 图片要存放的目录
* @param arr $thumb 是否生成缩略图 默认不生成, 第一个元素为宽,第二个为高
* @return arr 返回一个数组 data[ok]==1 证明成功
*/
function uploadimg($imgname, $dirname,$thumb=array()){
if(isset($_FILES[$imgname]) && $_FILES[$imgname]['error'] == 0){
//上传参数
$upload = new \Think\Upload(C('IMG_ATTRIBUTE'));
$upload->savePath = $dirname . '/';
$info = $upload->uploadOne($_FILES[$imgname]);
if(!$info){
//先把上传失败原因赋给模型
return array(
'ok'=> 0,
'error'=> $upload->getError(),
);
//返回控制器
return false;
}else{
$data['ok'] = 1;
// $info = $info[$imgname];
$data['img'][0] = $info['savepath'].$info['savename'];
// echo $data['img'][0];exit;
//判断是否生成缩略图
if(!empty($thumb) && is_array($thumb) ){
$infopath = $upload->rootPath.$data['img'][0];
// print_f($infopath);
$image = new \Think\Image();
$image->open($infopath);
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
$image->thumb($thumb[0], $thumb[1])->save($upload->rootPath.$info['savepath'].'smller_'.$info['savename']);
$data['img'][1] = $info['savepath'].'smller_'.$info['savename'];
}
return $data;
}
}
}
/**
* 多图上传
* @param str $imgname input name 的名字
* @param str $dirname 上传目录的名字
* @param arr $thumb 是否生成缩略图 默认不生成, 如果要生成, 数组里第2个参数, 第一个为高 第二个为宽
*/
//多图上传专用
function uploadimgs($imgname, $dirname,$thumb=array()){
if(isset($_FILES[$imgname])){
//上传参数
$upload = new \Think\Upload(C('IMG_ATTRIBUTE'));
$upload->savePath = $dirname . '/';
$info = $upload->upload(array($_FILES[$imgname]));
if(!$info){
//先把上传失败原因赋给模型
return array(
'ok'=> 0,
'error'=> $upload->getError(),
);
//返回控制器
return false;
}else{
$data['ok'] = 1;
foreach ($info as $key => $value) {
$data['img'][] = $value['savepath'].$value['savename'];
}
//判断是否生成缩略图
if(!empty($thumb) && is_array($thumb) ){
$infopath = $upload->rootPath.$data['img'][0];
// print_f($infopath);
$image = new \Think\Image();
$image->open($infopath);
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
$image->thumb($thumb[0], $thumb[1])->save($upload->rootPath.$info['savepath'].'smller_'.$info['savename']);
$data['img'][1] = $info['savepath'].'smller_'.$info['savename'];
}
return $data;
}
}
}
/**
* 文件多图片的修改 针对多图,可选择数据库
* @author 赵大人 <243356121@qq.com>
* @param str $imgname 图片input file 的名字
* @param str $dirname 图片上传目录的名字
* @param str $table 图片操作的数据库名字
* @param str $id 图片的id 数据库里面的主键id
* @param str $key 图片的下标,上传图片的顺序,意思就是第几张图片
*
*/
//多图修改
function updateimgs($imgname,$dirname,$table,$id,$key){
if(isset($_FILES[$imgname]['tmp_name'][$key]) && $_FILES[$imgname]['error'][$key] == 0){
//先根据商品id取出商品图片所在位置
$db = M($table);
$img = $db->find($id);
// print_r($img);exit;
//拼接图片路径
$path = C('IMG_ATTRIBUTE')['rootPath'];
//先删除缩略图
// $simg = str_replace('/', '/smller_', $img['img']);
// unlink($path.$img['thumb']);
unlink($path.$img[$imgname]);
//上传参数
//妈的 提取下标为当前下标的图片
foreach ($_FILES[$imgname] as $k => $value) {
$newfile[$k] = $value[$key];
}
// print_r($newfile);exit;
$upload = new \Think\Upload(C('IMG_ATTRIBUTE'));
$upload->savePath = $dirname . '/';
$info = $upload->uploadOne($newfile);
if(!$info){
//先把上传失败原因赋给模型
// echo '上传失败?';exit;
$db->error = $upload->getError();
//返回控制器
return false;
}else{
$data['ok'] = 1;
$data['img'] = $info['savepath'].$info['savename'];
}
}
return $data;
}