php+ajax+plupload插件实现无刷新头像上传并预览功能

 更新 2021-08-12 浏览 850次

php+ajax+plupload插件实现无刷新头像上传并预览功能
描述:Plupload是一款由著名的web编辑器TinyMCE团队开发的上传组件,简单易用且功能强大,我们完全可以使用Plupload来代替以前的SWFUpload。
基础属性
详细介绍

Plupload介绍:

1、拥有多种上传方式:HTML5、flash、silverlight以及传统的type=file” 。Plupload会自动侦测当前的环境,选择最合适的上传方式,并且会优先使用HTML5的方式。所以你完全不用去操心当前的浏览器支持哪些上传方式,Plupload会自动为你选择最合适的方式。

2、支持以拖拽的方式来选取要上传的文件

3、支持在前端压缩图片,即在图片文件还未上传之前就对它进行压缩

4、可以直接读取原生的文件数据,这样的好处就是例如可以在图片文件还未上传之前就能把它显示在页面上预览

5、支持把大文件切割成小片进行上传,因为有些浏览器对很大的文件比如几G的一些文件无法上传。


使用方法如下:


载入jQuery库文件和Plupload插件:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="plupload/plupload.full.min.js"></script>

js代码功能:

<script type="text/javascript">
var uploader_avatar = new plupload.Uploader({//创建实例的构造方法
	runtimes: 'gears,html5,html4,silverlight,flash', //上传插件初始化选用那种方式的优先级顺序
	browse_button: ['avatar_uplpad_btn'], // 上传按钮
	url: "ajax.php", //远程上传地址
	flash_swf_url: 'js/plugins/plupload/Moxie.swf', //flash文件地址
	silverlight_xap_url: 'js/plugins/plupload/Moxie.xap', //silverlight文件地址
	filters: {
		max_file_size: '10mb', //最大上传文件大小(格式100b, 10kb, 10mb, 1gb)
		mime_types: [//允许文件上传类型
			{title: "files", extensions: "jpg,png,gif,jpeg"}
		]
	},
	multi_selection: false, //true:ctrl多文件上传, false 单文件上传
	init: {
		FilesAdded: function(up, files) { //文件上传前
			$("#avatar_pic").hide();
			$("#loading_bar").show();
			uploader_avatar.start();
		},
		UploadProgress: function(up, file) { //上传中,显示进度条

			var percent = file.percent;
			$("#percent").css({"width": percent + "%"});
			$("#percentnum").text(percent + "%");
		},
		FileUploaded: function(up, file, info) { //文件上传成功的时候触发
			var data = eval("(" + info.response + ")");//解析返回的json数据
			$("#avatar_pic").html("<img  src='" + data.pic + "'/>");
			$("#loading_bar").hide();
			$("#avatar_pic").show();
		},
		Error: function(up, err) { //上传出错的时候触发
			alert(err.message);
			$("#loading_bar").hide();
		}
	}
});
uploader_avatar.init();
</script>

HTML代码:

<div class="avatar_area" style="margin:120px 0 0;text-align: center;min-height: 300px">
    <a href="javascript:void(0);"class="avatar_uplpad_btn" id="avatar_uplpad_btn"></a>
    <div id="avatar_pic" style="margin:30px 0 0"><img src="images/head.png"/></div>
    <div id="loading_bar" style="display:none">
        <p id="updesc">图片上传中...</p>
        <span class="loading_bar"><em id="percent" style="width: 27%;"></em></span>
        <span id="percentnum">27%</span>
    </div>
</div>

上传后端代码处理(ajax.php)

<?php

$typeArr = array("jpg", "png", "gif", "jpeg", "mov", "gears", "html5", "html4", "silverlight", "flash"); //允许上传文件格式
$path = "uploads/"; //上传路径

if (isset($_POST)) {
    $name = $_FILES['file']['name'];
    $size = $_FILES['file']['size'];
    $name_tmp = $_FILES['file']['tmp_name'];
    if (empty($name)) {
        echo json_encode(array("error" => "您还未选择文件"));
        exit;
    }
//    print_r($_FILES['file']);
    $type = strtolower(substr(strrchr($name, '.'), 1)); //获取文件类型
    if (!in_array($type, $typeArr)) {
        echo json_encode(array("error" => "清上传指定类型的文件!","type"=>"types"));
        exit;
    }
    if ($size > (50000 * 1024)) { //上传大小
        echo json_encode(array("error" => "文件大小已超过50000KB!","type"=>"size"));
        exit;
    }

    $pic_name = time() . rand(10000, 99999) . "." . $type; //文件名称
    $pic_url = $path . $pic_name; //上传后图片路径+名称
    if (move_uploaded_file($name_tmp, $pic_url)) { //临时文件转移到目标文件夹
        echo json_encode(array("error" => "0", "pic" => $pic_url, "name" => $pic_name));
    } else {
        echo json_encode(array("error" => "上传有误,清检查服务器配置!","type"=>"config"));
    }
}
?>


php实例PHP代码图片上传ajaxplupload
相关内容