本文实例分析了symfony2使用第三方库upload制作图片上传的方法。分享给大家供大家参考,具体如下:
我们在应用程序或者网站的个人资料里一般都有设置头像的功能,这一章我们在symfony2里用第三方的一个比较有名upload库来制作上传图片的功能。
一、安装第三方库
1.在composer.json文件中的”require”中加入
1
|
"codeguy/upload" : "*"
|
2.运行指令安装
1
|
composer update
|
二、编码
1.编写uploadpic方法上传图片,并将上传图片的用户id作为文件名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?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.用户上传头像,并将头像全路径存入数据库表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?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博客 ,转载时请注明出处及相应链接。
希望本文所述对大家基于symfony框架的php程序设计有所帮助。