Symfony2使用第三方库Upload制作图片上传实例详解

 更新时间:2016年2月9日 15:08  点击:2136

本文实例分析了Symfony2使用第三方库Upload制作图片上传的方法。分享给大家供大家参考,具体如下:

我们在应用程序或者网站的个人资料里一般都有设置头像的功能,这一章我们在Symfony2里用第三方的一个比较有名Upload库来制作上传图片的功能。

一、安装第三方库

1.在composer.json文件中的”require”中加入

"codeguy/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作为文件名,并修改表字段值为图片的全路径

本文永久地址:http://blog.it985.com/6544.html
本文出自 IT985博客 ,转载时请注明出处及相应链接。

更多关于PHP框架相关内容感兴趣的读者可查看本站专题:《php优秀开发框架总结》,《codeigniter入门教程》,《CI(CodeIgniter)框架进阶教程》,《Yii框架入门及常用技巧总结》及《ThinkPHP入门教程》

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

[!--infotagslink--]

相关文章

  • Symfony2安装的方法(2种方法)

    这篇文章主要介绍了Symfony2安装的方法,较为详细的分析了2种安装方法与具体步骤,需要的朋友可以参考下...2016-02-09
  • Symfony2实现在doctrine中内置数据的方法

    这篇文章主要介绍了Symfony2实现在doctrine中内置数据的方法,结合实例形式分析了在doctrine中内置数据的具体步骤与相关技巧,需要的朋友可以参考下...2016-02-12
  • Symfony2使用第三方库Upload制作图片上传实例详解

    这篇文章主要介绍了Symfony2使用第三方库Upload制作图片上传的方法,结合实例形式较为详细的分析了Symfony2使用第三方库Upload的具体步骤与相关使用技巧,需要的朋友可以参考下...2016-02-09
  • 微信小程序 图片上传实例详解

    这篇文章主要介绍了微信小程序 图片上传实例详解的相关资料,需要的朋友可以参考下...2017-05-09
  • Symfony2函数用法实例分析

    这篇文章主要介绍了Symfony2函数用法,结合实例形式分析了Symfony函数的调用及数据库操作的相关技巧,需要的朋友可以参考下...2016-03-21
  • php实现图片上传并利用ImageMagick生成缩略图

    这篇文章主要为大家详细介绍了php实现图片上传并利用ImageMagick生成缩略图的相关资料,需要的朋友可以参考下...2016-03-17
  • Symfony2安装第三方Bundles实例详解

    这篇文章主要介绍了Symfony2安装第三方Bundles的方法,结合实例形式分析了Symfony2通过composer来安装Bundle的具体步骤与相关技巧,需要的朋友可以参考下...2016-02-09
  • Symfony2实现在controller中获取url的方法

    这篇文章主要介绍了Symfony2实现在controller中获取url的方法,实例分析了Symfony获取URL的常用方法与使用技巧,需要的朋友可以参考下...2016-03-21
  • Symfony2在Nginx下的配置方法图文教程

    这篇文章主要介绍了Symfony2在Nginx下的配置方法,结合图文形式较为详细的分析了Symfony2在Nginx下的配置方法与具体操作步骤,需要的朋友可以参考下...2016-02-09
  • ThinkPHP实现图片上传操作的方法详解

    这篇文章主要介绍了ThinkPHP实现图片上传操作的方法,详细分析了thinkPHP图片上传操作的具体步骤与相关操作技巧,需要的朋友可以参考下...2017-05-21
  • Symfony2 session用法实例分析

    这篇文章主要介绍了Symfony2 session用法,结合实例形式分析了Symfony自带session方法的相关使用技巧,需要的朋友可以参考下...2016-02-09
  • PHP+Ajax+JS实现多图上传

    这篇文章主要为大家详细介绍了PHP+Ajax+JS实现多图上传的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-10
  • Symfony2之session与cookie用法小结

    这篇文章主要介绍了Symfony2之session与cookie用法,结合实例形式总结分析了Symfony框架针对session与cookie的设置、获取及删除等操作的实现方法,需要的朋友可以参考下...2016-03-21
  • js实现图片上传并正常显示

    这篇文章主要介绍了js实现图片上传并正常显示,我们经常遇到上传照片的情况,如何实现图片上传,本文为大家进行揭晓...2015-12-21
  • thinkphp实现图片上传功能

    这篇文章主要介绍了thinkphp实现图片上传功能的相关资料,需要的朋友可以参考下...2016-01-16
  • 两种php实现图片上传的方法

    这篇文章主要为大家介绍了两种php实现图片上传的方法,利用form表单上传,另一种方法是利用uploadify实现无刷新并且带进度条的上传,感兴趣的小伙伴们可以参考一下...2016-01-23
  • Symfony2开发之控制器用法实例分析

    这篇文章主要介绍了Symfony2开发之控制器用法,结合实例形式分析了Symfony2控制器的简单使用技巧,需要的朋友可以参考下...2016-02-12
  • Symfony2使用Doctrine进行数据库查询方法实例总结

    这篇文章主要介绍了Symfony2使用Doctrine进行数据库查询方法,结合实例形式总结分析了基于Doctrine的基本查询、DQL及查询生成器的基本实现方法,需要的朋友可以参考下...2016-03-21
  • Symfony2创建页面实例详解

    这篇文章主要介绍了Symfony2创建页面的方法,结合实例形式分析了Symfony页面创建的具体步骤与相关实现技巧,需要的朋友可以参考下...2016-03-21
  • php+html5实现无刷新图片上传教程

    这篇文章主要为大家介绍了php+html5实现无刷新图片上传教程,一种全新的上传图片的方式,利用html5的FileReader读取图片文件,感兴趣的小伙伴们可以参考一下...2016-01-23