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 05 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
PHP基于进程控制函数实现多线程
Dec 09 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+js iframe实现上传头像界面无跳转
2014/04/29 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
几种tab切换详解
2017/02/03 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
Vue实现验证码功能
2019/12/03 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
Python中optparse模块使用浅析
2015/01/01 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
TensorFlow的权值更新方法
2018/06/14 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
构造方法和其他方法的区别
2016/04/26 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
2014年创卫实施方案
2014/02/18 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
学生党员公开承诺书
2014/05/28 职场文书
公共场所标语
2014/06/30 职场文书
七夕活动策划方案
2014/08/16 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python