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取整的几种方式
Jun 25 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
CodeIgniter删除和设置Cookie的方法
Apr 07 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
PHP命令行与定时任务
Apr 01 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
Java中final关键字详解
2015/08/10 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
javascript正则表达式总结
2016/02/29 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
vue实现登录拦截
2020/06/29 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python中如何导入类示例详解
2019/04/17 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
上学路上观后感
2015/06/16 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js