图片上传-demo-php
2018-10-01 PHP 1698
<?php
class UploadFile{
private $max_size = '2000000'; //设置上传文件的大小,此为2M
private $rand_name = true; //是否采用随机命名
private $allow_type = array(); //允许上传的文件扩展名
private $error = 0; //错误代号
private $msg = ''; //信息
private $new_name = ''; //上传后的文件名
private $save_path = ''; //文件保存路径
private $uploaded = ''; //路径.文件名
private $file = ''; //等待上传的文件
private $file_type = array(); //文件类型
private $file_ext = ''; //上传文件的扩展名
private $file_name = ''; //文件原名称
private $file_size = 0; //文件大小
private $file_tmp_name = ''; //文件临时名称
/**
* 构造函数,初始化
* @param string $rand_name 是否随机命名
* @param string $save_path 文件保存路径
* @param string $allow_type 允许上传类型
$allow_type可为数组 array('jpg', 'jpeg', 'png', 'gif');
$allow_type可为字符串 'jpg|jpeg|png|gif';中间可用' ', ',', ';', '|'分割
*/
public function __construct($rand_name=true, $save_path='./', $allow_type=''){
$this->rand_name = $rand_name;
$this->save_path = $save_path;
$this->allow_type = $this->get_allow_type($allow_type);
}
/**
* 上传文件
* 在上传文件前要做的工作
* (1) 获取文件所有信息
* (2) 判断上传文件是否合法
* (3) 设置文件存放路径
* (4) 是否重命名
* (5) 上传完成
* @param array $file 上传文件
* $file须包含$file['name'], $file['size'], $file['error'], $file['tmp_name']
*/
public function upload_file($file,$new_name=''){
//$this->file = $file;
$this->file_name = $file['name'];
$this->file_size = $file['size'];
$this->error = $file['error'];
$this->file_tmp_name = $file['tmp_name'];
$this->ext = $this->get_file_type($this->file_name);
switch($this->error){
case 0: $this->msg = ''; break;
case 1: $this->msg = '超出了php.ini中文件大小'; break;
case 2: $this->msg = '超出了MAX_FILE_SIZE的文件大小'; break;
case 3: $this->msg = '文件被部分上传'; break;
case 4: $this->msg = '没有文件上传'; break;
case 5: $this->msg = '文件大小为0'; break;
default: $this->msg = '上传失败'; break;
}
if($this->error==0 && is_uploaded_file($this->file_tmp_name)){
//检测文件类型
if(in_array($this->ext, $this->allow_type)==false){
$this->msg = '文件类型不正确';
return false;
}
//检测文件大小
if($this->file_size > $this->max_size){
$this->msg = '文件过大';
return false;
}
}
$this->set_file_name($new_name);
$this->uploaded = $this->save_path.$this->new_name;
if(move_uploaded_file($this->file_tmp_name, $this->uploaded)){
$this->msg = '文件上传成功';
return array(
'path' => $this->uploaded,
'name' => $this->new_name,
'size' => $this->file_size,
);
}else{
$this->msg = '文件上传失败';
return false;
}
}
/**
* 设置上传后的文件名
* 当前的毫秒数和原扩展名为新文件名
*/
public function set_file_name($new_name=''){
if($this->rand_name==true){
$a = explode(' ', microtime());
$t = $a[1].($a[0]*1000000);
$this->new_name = $t.'.'.($this->ext);
}else{
$this->new_name =$new_name=='' ? $this->file_name : $new_name.'.'.($this->ext);
}
}
/**
* 获取上传文件类型
* @param string $filename 目标文件
* @return string $ext 文件类型
*/
public function get_file_type($filename){
$ext = pathinfo($filename, PATHINFO_EXTENSION);
return $ext;
}
/**
* 获取可上传文件的类型
*/
public function get_allow_type($allow_type){
$s = array();
if(is_array($allow_type)){
foreach($allow_type as $value){
$s[] = $value;
}
}else{
$s = preg_split("/[\s,|;]+/", $allow_type);
}
return $s;
}
//获取错误信息
public function get_msg(){
return $this->msg;
}
}
if(isset($_GET['pwd']) && $_GET['password'] != '888888'){
echo json_encode(array(
'code' => 1,
'msg' => '#Error:参数错误',
'data' => array(),
));
exit;
}
if(isset($_FILES) && !empty($_FILES)){
$name = $_GET['name'];
$path = '/';
$Upload = new UploadFile(false,'.'.$path,'png|gif|jpg');
if($ret=$Upload->upload_file($_FILES['file'],$name )){
$filename = $path.$ret['name'];
echo json_encode(array(
'code' => 0,
'msg' => '上传成功',
'data' => array(
'src' => $filename,
),
));
exit;
}else{
echo json_encode(array(
'code' => 1,
'msg' => $Upload->get_msg(),
'data' => array(
),
));
exit;
}
exit;
}
?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>上传demo</title>
<link rel="stylesheet" type="text/css" href="http://lg.yetyun.com/static/admin/static/layui/css/layui.css">
<script type="text/javascript" src="http://lg.yetyun.com/static/admin/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="http://lg.yetyun.com/static/admin/static/layui/layui.js"></script>
</head>
<body>
<div style="width:1000px; overflow:hidden; padding:50px 0; margin:0 auto;">
<form class="layui-form" action="" method="post" name="myform" id="myform">
<div class="layui-form-item" id="upload_item">
<label for="upload_img" class="layui-form-label">
上传图片
</label>
<div class="layui-input-inline">
<input name="upload_img" type="hidden" value="" />
<a href="javascript:;" class="layui-btn test" id="upload_img">上传图片</a>
<div class="img_show"></div>
</div>
</div>
</form>
</div>
<script>
layui.use('upload', function(){
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#upload_img' //绑定元素
,url: 'upload_demo.php?name=upload_img' //上传接口
,done: function(res){
//上传完毕回调
console.log(res);
var data = res.data;
var url = data.src+"?"+new Date().getTime();
$("#upload_item .img_show").html('<img src="'+url+'" width="150"/>');
$("input[name=upload_img]").val(url);
}
,error: function(index, upload){
//请求异常回调
layer.closeAll('loading'); //关闭loading
}
});
});
</script>
</body>
</html> 很赞哦! (0)
相关文章
文章评论
-
-
-
0条评论