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 调用远程url的六种方法小结
Nov 02 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
php构造函数与析构函数
Apr 23 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python3中zip()函数使用详解
2018/06/29 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
pytest中文文档之编写断言
2019/09/12 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
学习python需要有编程基础吗
2020/06/02 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
保护环境的建议书
2014/03/12 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
英语感谢信范文
2015/01/20 职场文书
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python