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 获取页面中指定内容的实现类
Jan 23 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
php递归实现无限分类的方法
Jul 28 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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下通过POST还是GET来传值
2008/06/05 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
详解Python3中字符串中的数字提取方法
2017/01/14 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python实现一个猜拳游戏
2020/04/05 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
new修饰符是起什么作用
2015/06/28 面试题
大专自我鉴定范文
2013/10/01 职场文书
物业总经理岗位职责
2014/02/28 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
爱我中华演讲稿
2014/05/20 职场文书
小学运动会口号
2014/06/07 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
实习护士自荐信
2015/03/25 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
Nginx缓存设置案例详解
2021/09/15 Servers