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在字符串中查找指定字符串并删除的代码
Oct 02 PHP
获取远程文件大小的php函数
Jan 11 PHP
php 在文件指定行插入数据的代码
May 08 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
CI框架整合smarty步骤详解
May 19 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
PHP中cookie知识点学习
May 06 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
php 的多进程操作实践案例分析
Feb 28 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读取纯真ip数据库使用示例
2014/01/26 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Python面向对象类的继承实例详解
2018/06/27 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
家庭贫困证明
2014/09/23 职场文书
给老婆的保证书
2015/01/16 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers