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中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
php读取excel文件的简单实例
Aug 26 PHP
ini_set的用法介绍
Jan 07 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
linux下实现定时执行php脚本
Feb 13 PHP
PHP中返回引用类型的方法
Apr 03 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
php实现session共享的实例方法
Sep 19 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
laravel框架与其他框架的详细对比
Oct 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
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
关于COOKIE个数与大小的问题
2011/01/17 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
js实现星星打分效果
2020/07/05 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
python批量提取word内信息
2015/08/09 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
机电职业生涯规划书范文
2014/03/08 职场文书
大学新生入学教育方案
2014/05/16 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
复兴之路展览观后感
2015/06/02 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
python基础入门之字典和集合
2021/06/13 Python