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 多行多列显示
Aug 15 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
PHP过滤黑名单关键字的方法
Dec 01 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
一个简单的php路由类
May 29 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
laradock环境docker-compose操作详解
Jul 29 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
Yii调试SQL的常用方法
2014/07/09 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
php控制文件下载速度的方法
2015/03/24 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python之list对应元素求和的方法
2018/06/28 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
python 操作hive pyhs2方式
2019/12/21 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
哈理工毕业生的求职信
2013/12/22 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
小学美术教学反思
2014/02/01 职场文书
《风筝》教学反思
2014/04/10 职场文书
大班幼儿评语大全
2014/04/30 职场文书
初中英语教学反思范文
2016/02/15 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
golang使用map实现去除重复数组
2022/04/14 Golang
Golang解析JSON对象
2022/04/30 Golang
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript