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 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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 字符串函数收集
2010/03/29 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
python实现的重启关机程序实例
2014/08/21 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
python实现密码强度校验
2020/03/18 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
sort命令的作用和用法
2013/08/25 面试题
本科生求职简历的自我评价
2013/10/21 职场文书
联谊活动策划书
2014/01/26 职场文书
课程改革实施方案
2014/03/16 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
考博导师推荐信范文
2015/03/27 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
java executor包参数处理功能 
2022/02/15 Java/Android