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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP 截取字符串专题集合
Aug 19 PHP
php中文验证码实现示例分享
Jan 12 PHP
php中require和require_once的区别说明
Feb 27 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP字典树(Trie树)定义与实现方法示例
Oct 09 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
php微信开发之关键词回复功能
Jun 13 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 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
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
python list语法学习(带例子)
2013/11/01 Python
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
遗传算法之Python实现代码
2017/10/10 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
整改报告怎么写
2014/11/06 职场文书
2014年度个人工作总结
2014/11/07 职场文书
前台文员岗位职责
2015/02/04 职场文书
开场白怎么写
2015/06/01 职场文书
结婚仪式主持词
2015/06/29 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
2019各种保证书范文
2019/06/24 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书