图片存储、上传、显示优化

1、图片路径写进配置文件,当路径有变动时【因业务扩大,服务器存储图片空间不足等】,只需修改配置文件,而不用修改代码

2、封装显示、上传、删除函数,实现代码重用

  【可类比其他类似的操作】

1、在/Common/Common/Conf/conf.php中,写入图片配置  C()

2、把显示图片showImage()的功能封装到/Common/Common/function.php中

//显示图片
function showImage($url, $width = '', $height = '')
{
$ic = C('IMAGE_CONFIG'); //读取配置文件
if($width)
$width = "width='$width'"; //显示宽度(html代码)
if($height)
$height = "height='$height'";
echo "<img $width $height src='{$ic['viewPath']}$url' />";
}

showImage()

  在页面中显示图片

3、把上传图片uploadOne()的功能封装到/Common/Common/function.php中

function uploadOne($imgName, $dirName, $thumb = array())
{
// 上传LOGO
if(isset($_FILES[$imgName]) && $_FILES[$imgName]['error'] == 0)
{
$ic = C('IMAGE_CONFIG');
$upload = new \Think\Upload(array(
'rootPath' => $ic['rootPath'],
'maxSize' => $ic['maxSize'],
'exts' => $ic['exts'],
));// 实例化上传类
$upload->savePath = $dirName . '/'; // 图片二级目录的名称
// 上传文件
// 上传时指定一个要上传的图片的名称,否则会把表单中所有的图片都处理,之后再想其他图片时就再找不到图片了
$info = $upload->upload(array($imgName=>$_FILES[$imgName]));
if(!$info)
{
return array(
'ok' => 0,
'error' => $upload->getError(),
);
}
else
{
$ret['ok'] = 1;
$ret['images'][0] = $logoName = $info[$imgName]['savepath'] . $info[$imgName]['savename'];
// 判断是否生成缩略图[$thumb数组存储尺寸]
if($thumb)
{
$image = new \Think\Image();
// 循环生成缩略图
foreach ($thumb as $k => $v)
{
$ret['images'][$k+1] = $info[$imgName]['savepath'] . 'thumb_'.$k.'_' .$info[$imgName]['savename'];
// 打开要处理的图片
$image->open($ic['rootPath'].$logoName);
$image->thumb($v[0], $v[1])->save($ic['rootPath'].$ret['images'][$k+1]);
}
}
return $ret;
}
}
}

  GoodsModel.class.php添加商品时_before_insert()使用

4、删除图片函数deleteImage()

function deleteImage($image = array())
{
$savePath = C('IMAGE_CONFIG');
foreach ($image as $v)
{
unlink($savePath['rootPath'] . $v);
}
}

  GoodsModel.class.php删除商品时_before_delete()使用

最新文章

  1. 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现
  2. Tomcat catalina.out日志使用log4j按天分割
  3. ORACLE 生成一个随机数
  4. IOS开发-KVC
  5. Lua之元表
  6. 面向服务的架构SOA
  7. 变量监控 指令 gt-wach
  8. MYSQL随机抽取查询 MySQL Order By Rand()效率问题
  9. 常用的js函数
  10. 静态方法使用bean
  11. HTTPS与MITM
  12. Red and Black(dfs水)
  13. android 线程那点事
  14. Rx响应式编程
  15. fast-ai lesson1 错误处理(CNN创建)
  16. 反射与jvm
  17. Java网络通信协议、UDP、TCP类加载整理
  18. mysql 命令行常用命令
  19. C++,java信息,文件传输
  20. mac下用命令行解压文件

热门文章

  1. Springboot中SpringMvc拦截器配置与应用(实战)
  2. head头部内放些什么标签?
  3. Java获取Date类型-针对SQL语句
  4. 用iSee图片专家制作淘宝店标教程
  5. Win7无法连接wifi网络的解决方法
  6. cs231n 17-18 assignment2 出现 No module named &#39;past&#39; 解决方法
  7. Illegal access:this web application instance has been stopped already
  8. ELF文件中section与segment的区别
  9. BZOJ 3227: [Sdoi2008]红黑树(tree)
  10. 2018.7.9 Android—显式Intent和隐式Intent的区别