Symfony2使用第三方库Upload制作图片上传实例详解


Posted in PHP onFebruary 04, 2016

本文实例分析了Symfony2使用第三方库Upload制作图片上传的方法。分享给大家供大家参考,具体如下:

我们在应用程序或者网站的个人资料里一般都有设置头像的功能,这一章我们在Symfony2里用第三方的一个比较有名Upload库来制作上传图片的功能。

一、安装第三方库

1.在composer.json文件中的”require”中加入

"codeguy/upload": "*"

Symfony2使用第三方库Upload制作图片上传实例详解

2.运行指令安装

composer update

二、编码

1.编写uploadPic方法上传图片,并将上传图片的用户id作为文件名

<?php
/**
 * @author Sun
 * By blogs.zmit.cn http://blogs.zmit.cn
 * 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 http://blogs.zmit.cn/6544.html
 * 中梦博客,作者信息和本声明。否则将追究法律责任。
 */
namespace ZM\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Filesystem\Filesystem;
class DefaultController extends Controller {
  public function indexAction($name) {
    return $this->render('ZMAdminBundle:Default:index.html.twig', array('name' => $name));
  }
  /**
   * 上传图片
   *
   * @param type $user_id 用户的id,用作文件名
   * @param type $str   表单中file类型的input的name
   * @param type $path  保存路径
   * @return type
   */
  public function uploadPic($user_id, $str, $path) {
    $fs = new Filesystem();
    //检查路径是否存在
    if (!$fs->exists($path)) {
      //如果不存在,创建目录
      $fs->mkdir($path, 0700);
    }
    //使用Upload库
    $storage = new \Upload\Storage\FileSystem($path);
    $file = new \Upload\File($str, $storage);
    //如果文件名为空
    if ($file->getName() != '') {
      //设置文件名为用户的id
      $file->setName($user_id);
      //验证文件上传
      $file->addValidations(array(
        //指定文件类型
        new \Upload\Validation\Mimetype(array('image/png', 'image/jpg', 'image/jpeg', 'image/gif')),
        //指定文件大小
        new \Upload\Validation\Size('2M')
      ));
      //上传文件
      try {
        //成功
        $file->upload();
        //文件名和扩展名
        $file_name = $file->getNameWithExtension();
      } catch (\Exception $e) {
        //失败!
        $errors = $file->getErrors();
      }
    }
    //返回文件名和扩展名
    return $file_name;
  }
}

2.用户上传头像,并将头像全路径存入数据库表

<?php
/**
 * 联系人控制器
 * @author Sun
 * By blogs.zmit.cn http://blogs.zmit.cn
 * 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 http://blogs.zmit.cn/6544.html
 * 中梦博客,作者信息和本声明。否则将追究法律责任。
 */
namespace ZM\ApiBundle\Controller;
//引用写好的上传图片方法uploadPic的Controller,并命名为BaseController
use ZM\AdminBundle\Controller\DefaultController AS BaseController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
//继承BaseController
class ContactController extends BaseController {
  /**
   * 用户上传头像
   *
   * @return Response
   */
  public function uploadHeadAction() {
    $request = Request::createFromGlobals()->request;
    $user_id = $request->get('user_id');
    //判断是否有文件上传
    if (isset($_FILES['head']) && $_FILES['head'] != '') {
      $conn = $this->getDoctrine()->getConnection();
      $data = $conn->fetchAssoc("SELECT id, head FROM contact WHERE id = ? LIMIT 1", array($user_id));
      //判断用户是否存在
      if(!empty($data['id'])) {
        //设置图片保存路径
        $path = 'image/head/';
        //获取上传文件后返回的文件名和扩展名
        $file_name = $this->uploadPic($user_id, 'head', $path);
        //修改用户contact表head头像字段的值
        $conn->executeUpdate("UPDATE contact SET head = ? WHERE id = ?", array($path . $file_name, $user_id));
        $result['flag'] = 1;
        $result['content'] = '上传头像成功!';
      } else {
        $result['flag'] = 3;
        $result['content'] = '用户不存在!';
      }
    }else{
      $result['flag'] = 2;
      $result['content'] = '上传失败,没有选择图片!';
    }
    return new Response(json_encode($result), '200', array('Content-Type' => 'application/json'));
  }
}

这样图片就上传成功,将用户的id作为文件名,并修改表字段值为图片的全路径

Symfony2使用第三方库Upload制作图片上传实例详解

本文永久地址:http://blog.it985.com/6544.html
本文出自 IT985博客 ,转载时请注明出处及相应链接。

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

PHP 相关文章推荐
如何写php程序?
Dec 08 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
Yii学习总结之安装配置
Feb 22 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 #PHP
Symfony2安装的方法(2种方法)
Feb 04 #PHP
Symfony生成二维码的方法
Feb 04 #PHP
twig模板常用语句实例小结
Feb 04 #PHP
Symfony2 session用法实例分析
Feb 04 #PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 #PHP
php session实现多级目录存放实现代码
Feb 03 #PHP
You might like
桌面中心(四)数据显示
2006/10/09 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
JavaScript的Cookies
2008/01/16 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python多线程抽象编程模型详解
2019/03/20 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
文明单位创建材料
2014/12/24 职场文书
目标责任书格式范文
2015/05/11 职场文书
理想国读书笔记
2015/06/25 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL