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判断变量类型常用方法
Apr 24 PHP
解析PHP工厂模式的好处
Jun 18 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
PHP写日志的实现方法
Nov 05 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
xtree.js 代码
2007/03/13 Javascript
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
JS实现可控制的进度条
2020/03/25 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
波兰购物网站:MALL.PL
2019/05/01 全球购物
行政人员岗位职责
2013/12/08 职场文书
优秀教师事迹简介
2014/02/02 职场文书
护理中职生求职信范文
2014/02/24 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
学习计划是什么
2019/04/30 职场文书