使用thinkphp开发app后端中,需要实现一个处理上传图片队列的功能

这是一个上传多图片并且需要对其中一张图片进行压缩,使之成为缩略图方便用于在app端预览
(使用的html5 mui框架开发app,如果直接载入原图,app客户端列表中图稍微多几张就会使得webview十分卡顿,建议在开发中,一定要对用户上传的图片进行服务器端的压缩)

之前已经写过一篇关入如何使用html5+的uploader上传多张图片到服务器的博客:
http://www.cnblogs.com/devilyouwei/p/6790255.html
并且实现了在前端进行压缩的功能(这是第一次压缩,有用户手机端进行)

上传到服务器后我们还需对图片进行处理,我这里使用的php作为后端语言,框架为thinkphp5

需要用到thinkphp的File类和Image类
File类:前者获取到用户上传的file(文件)并进行路径和文件名的操作
File类下的方法众多,主要有以下一些,使用之前应该先打印看一下,随意找一个文件测试一下效果,可以看的更加明白些:

$file = new File(ROOT_PATH."/public/uploads/20170506/abc.jpg");
$arr = ['getATime' => $file->getATime(), //最后访问时间 'getBasename' => $file->getBasename(), //获取无路径的basename 'getCTime' => $file->getCTime(), //获取inode修改时间 'getExtension' => $file->getExtension(), //文件扩展名 'getFilename' => $file->getFilename(), //获取文件名 'getGroup' => $file->getGroup(), //获取文件组 'getInode' => $file->getInode(), //获取文件inode 'getLinkTarget' => $file->getLinkTarget(), //获取文件链接目标文件 'getMTime' => $file->getMTime(), //获取最后修改时间 'getOwner' => $file->getOwner(), //文件拥有者 'getPath' => $file->getPath(), //不带文件名的文件路径 'getPathInfo' => $file->getPathInfo(), //上级路径的SplFileInfo对象 'getPathname' => $file->getPathname(), //全路径 'getPerms' => $file->getPerms(), //文件权限 'getRealPath' => $file->getRealPath(), //文件绝对路径 'getSize' => $file->getSize(),//文件大小,单位字节 'getType' => $file->getType(),//文件类型 file dir link 'isDir' => $file->isDir(), //是否是目录 'isFile' => $file->isFile(), //是否是文件 'isLink' => $file->isLink(), //是否是快捷链接 'isExecutable' => $file->isExecutable(), //是否可执行 'isReadable' => $file->isReadable(), //是否可读 'isWritable' => $file->isWritable()  //是否可写 ];print_r($arr);
return false;

print_r打印到浏览器后:

Array
([getATime] => 1494041766[getBasename] => abc.jpg[getCTime] => 1494041766[getExtension] => jpg[getFilename] => abc.jpg[getGroup] => 0[getInode] => 0[getLinkTarget] => D:\wamp\www\dashen\public\uploads\20170506\abc.jpg[getMTime] => 1494041766[getOwner] => 0[getPath] => D:\wamp\www\dashen\/public/uploads/20170506[getPathInfo] => SplFileInfo Object([pathName:SplFileInfo:private] => D:\wamp\www\dashen\/public/uploads/20170506[fileName:SplFileInfo:private] => 20170506)[getPathname] => D:\wamp\www\dashen\/public/uploads/20170506/abc.jpg[getPerms] => 33206[getRealPath] => D:\wamp\www\dashen\public\uploads\20170506\abc.jpg[getSize] => 571800[getType] => file[isDir] => [isFile] => 1[isLink] => [isExecutable] => [isReadable] => 1[isWritable] => 1
)

关于如何用thinkphp5处理上传的多张图片文件,专门写一个private方法来处理,最后返回处理好的图片的路径的数组
图片处理包括:
1. 将用户上传的图片保存到public/uploads/目录下
2. 按照日期建立目录,md5的编码时间作为文件名
3. 压缩其中第一张图片为缩略图,专门用于预览(也要保存到数据库)
4. 返回所有处理过图片的路径数组,由调用者处理后保存数据库

代码:

//文件上传转储(多文件),压缩首图
private function upload(){$files = request()->file();//遍历上传的图片foreach($files as $key=>$file){$info = $file->move(ROOT_PATH.'public/uploads');if($info){$data[$key] = $info->getSaveName();}else{return $file->getError();}//压缩第一张图if($key == 'img0'){$image = Image::open($info->getRealPath());$image->thumb(300, 200, Image::THUMB_CENTER)->save($info->getPath()."/thumb_".$info->getFilename());}}return $data;}

此方法中,压缩第一张图时需要用到原图的文件路径,名称等,我保存在原图同一目录下,在原图前面加上“thumb_”前缀作为区别。

调用upload方法的控制器方法(外部方法):

//用户提交疑难
public function addQues(){//验证登陆sessionif(!session("?user_info"))return ['info'=>'登录状态失效','login'=>0];$ajax['title'] = input('post.title/s');$ajax['content'] = input('post.content/s');$ajax['star'] = input("post.star/s");$ajax['reward'] = input('post.reward/s');$ajax['message'] = input('post.message/s');$ajax['price'] = input('post.price/s');if($ajax['title']==null || $ajax['content']==null || $ajax['star']==null || $ajax['reward']==null)return ['info'=>'标题,内容,难度,悬赏方式不能为空','status'=>0];if($ajax['title']=="" || $ajax['content']=="" || $ajax['star']=="" || $ajax['reward']=="")return ['info'=>'标题,内容,难度,悬赏方式不能为空','status'=>0];/** 图片上传功能*/$ajax['uid'] = session("user_info")['id'];$ajax['create_time'] = time();$ajax['update_time'] = $ajax['create_time'];$ajax['ip'] = get_client_ip();//此处调用private upload方法获得图片路径数组if(request()->file()!=null){$imgs = $this->upload();$ajax = array_merge($ajax,$imgs);}$f = db("Ask")->insert($ajax);if($f>=1)return['status'=>1,'info'=>'问题提交成功'];elsereturn['status'=>0,'info'=>'数据插入失败'];
}

ThinkPHP上传图片并压缩为缩略图相关推荐

  1. thinkphp上传图片自动压缩问题

    thinkphp上传图片后由于图片较大需要剪切,但是由于大部分浏览器阻挡剪切弹出窗口造成无法剪切 故使用thinkphp的生成缩略图的功能,上传的同时直接生成缩略图并覆盖原图,这样就可以自定义上传图片 ...

  2. 黄聪:php实现上传图片和等比例缩略图压缩图片

    上传图片然后按照比例缩略图,指定缩略图的最大高度或者最大宽度. <?php function _UPLOADPIC($upfile, $maxsize, $updir, $newname = ' ...

  3. php多图片上传并压缩,PHP 上传图片并压缩方法详解

    使用到三个文件connect.php:连接数据库用 test_upload.php:执行SQL语句用 upload_img.php:上传图片并压缩用 三个文件代码如下: connect.php< ...

  4. java 使用Thumbnailator 上传图片 并压缩图片大小

    http://www.cnblogs.com/miskis/p/5500822.html java 上传图片 并压缩图片大小 Thumbnailator 是一个优秀的图片处理的Google开源Java ...

  5. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量

    转载自  java 程序实现对图片的压缩生成缩略图并可设定长宽.尺寸压缩率.图片质量 之前是在另一位高手的上传内容中学习到的,并将其代码根据我的需求进行了修改,参考位置:http://jiangpin ...

  6. 用于图片切割,图片压缩,缩略图的生成(转到一个好东西)

    用于图片切割,图片压缩,缩略图的生成 imageCut#region imageCut     /**//// <summary>     /// 图片切割函数     /// </ ...

  7. input file 上传图片及压缩

    input file 上传图片及压缩 大致需求为:可上传图片,同时压缩图片大小(因为手机图片一般都会有几兆,原图上传会耗损过多资源):并且可以上传之后显示出来 ,再提交给服务器: <input ...

  8. vue之原生上传图片并压缩图片大小(1)

    vue之上传图片并压缩图片大小 vue之上传图片并压缩图片大小 vue之上传图片并压缩图片大小 这里使用的是 compressorjs , 安装 npm i compressorjs 注意:这个插件是 ...

  9. Thinkphp上传图片及形成缩略图

    一.上传图片的HTML代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...

最新文章

  1. 简单介绍一下umask 命令使用方法
  2. JVM必备指南(转)
  3. java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...
  4. 移动短信回执怎么开通_微信短视频直播怎么做?
  5. Greenplum字段拼接
  6. 并行磁共振成像——SENSE 敏感度编码成像
  7. 【Pygame系列一】吃豆人、魂斗罗等多款老游戏,80、90后的你玩过几个?(附素材源码)
  8. 小程序中视频作为页面背景
  9. 干货|爬虫被封的几个常见原因
  10. Beta冲刺第二周王者荣耀交流协会第三次会议
  11. python 基于PHP在线音乐网站
  12. 开源录屏软件Captura安装和使用
  13. Scrum master成长笔记 –Scrum master最需要的能力
  14. javaweb监听器(统计在线人数:统计session)
  15. [智慧供热]-论供热收费系统价值和意义?
  16. 数据库系统是什么?它由哪几部分组成?
  17. android中基于蓝牙开发的demo
  18. 如何看待深度学习门槛低的说法?
  19. Excel转Pajek可读文件格式(.net)Python实现
  20. html5电影影评静态模板,影评万能模板

热门文章

  1. 2021年小组年会总结
  2. yolov5原理到实现
  3. php模拟登陆青果教务系统,模拟登录 - php CURL模拟登陆正方教务系统
  4. table表头和首列的表格固定-CSS实现的Table表头固定
  5. python 处理excel文件,按某一列值生成多个excel文件
  6. 移动开发的碎片化时代
  7. 【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案
  8. TCP的三次握手详解
  9. 胧月初音未来计算机,胧月---初音未来(调教用)
  10. rds proxy 数据库代理 简介