TP图片上传

//控制器文件	
    public function index(){
	
		if(!empty($_POST)){
			
			$file = $_FILES["file"];
			if(!isset($file['tmp_name']) || !$file['tmp_name']) {
				$this->ajaxReturn(['code' => 401, 'msg' => '没有文件上传']);
				return false;
			}
			if($file["error"] > 0) {
				$this->ajaxReturn(['code' => 402, 'msg' => $file["error"]]);
				return false;
			}
			
			$upload_path = $_SERVER['DOCUMENT_ROOT'].".".__ROOT__."/Public/upload/";
			//  D:/wamp/www/1120/Public/upload
			//    /1120/tp/Public/upload/
			$file_path   = __ROOT__."/Public/upload/";
			
			if(!is_dir($upload_path)){
				$this->ajaxReturn(['code' => 403, 'msg' => '上传目录不存在']);
				return false;
			}
			if(move_uploaded_file($file["tmp_name"], $upload_path.$file['name'])){
				$this->ajaxReturn(['code' => 200, 'src' => $file_path.$file['name']]);
				return false;
			}else{
				$this->ajaxReturn(['code' => 404, 'msg' => '上传失败']);
				return false; 
			}
		}
		
		$this->show();
		
	}
	
	
	public function test(){
		if(!empty($_POST)){
			
			$upd = new \Think\Upload();
			$upd->rootPath = "./Public/";
			$upd->savePath = "./upload/";
			$info = $upd->upload();
			
			
		}else{
			$this->show();
		}
	}
	

 引入文件

 

<link href="__PUBLIC__/ajaxImageUpload/css/upload.css" type="text/css" rel="stylesheet" />
<script src="__PUBLIC__/ajaxImageUpload/js/jquery.js"></script>
<script src="__PUBLIC__/ajaxImageUpload/js/upload.js"></script

 upload.css样式

/*上传图片插件的样式*/

.upload-box{
    padding: 0 20px;
	margin: 0 auto;
	margin-top: 40px;
}

.upload-box .clear{
	clear: both;
}

.upload-box .clear:after{
	content: '';
	display: block;
	clear: both;
}

.upload-box .upload-tip{
	margin-bottom: 20px;
	font-size: 16px;
	color: #555;
}
.upload-box .image-box{
	padding: 18px;
	border:2px dashed #E7E6E6;
}

.image-box section{
	position: relative;
	width: 190px;
	height: 190px;
	float: left;
}

.image-box .upload-section{
	position: relative;
}

.image-box .image-section{
	margin-right: 20px;
	margin-bottom: 20px;
}

.image-section:hover{
	border: 1px solid #f15134;
}

/*/图片遮罩层样式*/
.image-section .image-shade{
	display: block;
	width: 100%;
	height: 100%;
	visibility: hidden;
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 9;
	background: rgba(0,0,0,.5);
}

/*鼠标放上去时显示遮罩层*/
.image-section:hover .image-shade{
	visibility: visible;
}

.image-section .image-zoom {
    position: absolute;
    width: 32px;
    height: 32px;
    top: 80px;
    right: 80px;
    display: none;
    z-index: 10;
    background:url(../images/zoom.png) no-repeat center;
}

.image-section .image-delete {
	position: absolute;
	width: 30px;
	height: 30px;
	top: 5px;
	right: 5px;
	display: none;
	z-index: 10;
	background:url(../images/delete.png) no-repeat center;
}

.image-section:hover .image-delete{
	display: block;
	cursor:pointer;
}

.image-section:hover .image-zoom{
    display: block;
    cursor:pointer;
}

.image-box .image-show{
	display: block;
	width: 100%;
	height: 100%;
}

.image-loading{
    border: 1px solid #D1D1D1;
	background:url(../images/loading.gif) no-repeat center;
}

.image-opcity{
	opacity: 0;
}


/*上传域样式*/
.upload-section #upload-input{
	width: 100%;
	height: 100%;
	opacity: 0;
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 100;
}

/*上传按钮样式*/
.upload-section .upload-btn {
	border:1px dashed #d0d0d0;
	width: 190px;
	height: 190px;
	background:url(../images/upload.png) no-repeat center;
}

/*遮罩层样式*/
.delete-modal{
	z-index: 1000;
	display: none;
	position: fixed;
	top: 0px;
	left: 0px;
	width: 100%;
	height: 100%;
	background: rgba(0,0,0,.4);
}
.delete-modal .modal-content{
	 width: 500px;
	 position: absolute;
	 top: 50%;
	 left: 50%;
	 margin-left: -250px;
	 margin-top: -80px;
	 background: white;
	 height: 160px;
	 text-align: center;
}

.modal-content p{
	margin: 0;
	padding: 0;
}
.modal-content .modal-tip{
	color: #555;
	height: 94px;
	line-height: 94px;
	font-size: 18px;
	border-bottom: 1px solid #D1D1D1;
}
.modal-content .modal-btn{

	height: 66px;
	line-height: 66px;
	position: absolute;
	bottom: 0px;
	left: 0px;
	width: 100%;
}
.modal-content .modal-btn span{
	width: 49.8%;
	display:inline-block;
	text-align: center;
	color:#d4361d ;
	font-size: 18px;
	border-right: 1px solid #D1D1D1;
}

.modal-btn:hover span{
    cursor:pointer;
}


/*图片预览样式*/
#zoom-shade {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
	min-height: 800px;
    height: 100%;
    z-index: 1100;
    background-color: rgb(119, 119, 119);
    opacity: 0.7;
    cursor: pointer;
    display: none;
}
#zoom-box {
    position: absolute;
    padding: 20px;
    z-index: 1101;
    outline: none;
    display: none;
    height: auto;
    top: 25%;
    left: 25%;
}

#zoom-content {

    outline: none;
    overflow: hidden;
    z-index: 1102;
    border: 10px solid #fff;
    opacity: 1;
}
#zoom-content img {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0 auto;
    border: none;
    outline: none;
    line-height: 0;
    vertical-align: top;
}

 upload.js文件

/**
 * author:gouguoyin
 * qq:245629560
 * doc:http://www.gouguoyin.cn/js/141.html
 */
(function($){
    $.fn.ajaxImageUpload = function(options){

        var defaults = {

            data: null,
            url: '',
            zoom: true,
            allowType: ["gif", "jpeg", "jpg", "bmp",'png'],
            maxNum: 10,
            hidenInputName: '', // 上传成功后追加的隐藏input名,注意不要带[],会自动带[],不写默认和上传按钮的name相同
            maxSize: 2, //设置允许上传图片的最大尺寸,单位M
            success: $.noop, //上传成功时的回调函数
            error: $.noop //上传失败时的回调函数

        };

        var thisObj = $(this);
        var config  = $.extend(defaults, options);

        var uploadBox = $(".upload-box");
        var imageBox  = $(".image-box");
        var inputName = thisObj.attr('name');

        // 设置是否在上传中全局变量
        isUploading  = false;

        thisObj.each(function(i){
            thisObj.change(function(){
                handleFileSelect();
            });
        });

        var handleFileSelect = function(){

            if (typeof FileReader == "undefined") {
                return false;
            }

            // 获取最新的section数量
            var imageNum  = $('.image-section').length;

            var postUrl   = config.url;
            var maxNum    = config.maxNum;
            var maxSize   = config.maxSize;
            var allowType = config.allowType;

            if(!postUrl){
                alert('请设置要上传的服务端地址');
                return false;
            }

            if(imageNum + 1 > maxNum ){
                alert("上传图片数目不可以超过"+maxNum+"个");
                return;
            }

            var files    = thisObj[0].files;
            var fileObj  = files[0];

            if(!fileObj){
                return false;
            }

            var fileName = fileObj.name;
            var fileSize = (fileObj.size)/(1024*1024);

            if (!isAllowFile(fileName, allowType)) {

                alert("图片类型必须是" + allowType.join(",") + "中的一种");
                return false;

            }

            if(fileSize > maxSize){

                alert('上传图片不能超过' + maxSize + 'M,当前上传图片的大小为'+fileSize.toFixed(2) + 'M');
                return false;

            }

            if(isUploading == true){

                alert('文件正在上传中,请稍候再试!');
                return false;

            }

            // 将上传状态设为正在上传中
            isUploading = true;

            // 执行前置函数
            var callback = config.before;

            if(callback && callback() === false){
                return false;
            }

            createImageSection();

            ajaxUpload();

        };

        var ajaxUpload = function () {

            // 获取最新的
            var imageSection = $('.image-section:first');
            var imageShow    = $('.image-show:first');

            var formData = new FormData();

            var fileData = thisObj[0].files;

            if(fileData){

                // 目前仅支持单图上传
                formData.append(inputName, fileData[0]);

            }

            var postData = config.data;

            if (postData) {
                for (var i in postData) {

                    formData.append(i, postData[i]);

                }
            }

            // ajax提交表单对象
            $.ajax({
                url: config.url,
                type: "post",
                data: formData,
                processData: false,
                contentType: false,
                dataType: 'json',
                success:function(json){

                    if(json.code == 200 && !json.src){
                        alert('服务器返回的json数据中必须包含src元素');
                        imageSection.remove();
                        return false;
                    }else if(json.code != 200){
                        alert(json.msg);
                        imageSection.remove();
                        return false;
                    }

                    imageSection.removeClass("image-loading");
                    imageShow.removeClass("image-opcity");

                    imageShow.attr('src', json.src);
                    imageShow.siblings('input').val(json.src);

                    // 将上传状态设为非上传中
                    isUploading = false;

                    // 执行成功回调函数
                    var callback = config.success;
                    callback(json);

                },
                error:function(e){

                    imageSection.remove();
                    // 执行失败回调函数
                    var callback = config.error;
                    callback(e);

                }
            });

        };

        var createDeleteModal = function () {

            var deleteModal   = $("<aside class='delete-modal'><div class='modal-content'><p class='modal-tip'>您确定要删除作品图片吗?</p><p class='modal-btn'> <span class='confirm-btn'>确定</span><span class='cancel-btn'>取消</span></p></div></aside>");
            // 创建删除模态框
            deleteModal.appendTo('.image-box');

            // 显示弹框
            imageBox.delegate(".image-delete","click",function(){

                // 声明全局变量
                deleteImageSection = $(this).parent();
                deleteModal.show();

            });

            // 确认删除
            $(".confirm-btn").click(function(){

                deleteImageSection.remove();

                deleteModal.hide();

            });

            // 取消删除
            $(".cancel-btn").click(function(){
                deleteModal.hide();
            });

        };

        var createImageSection = function () {

            var hidenInputName = config.hidenInputName;

            if(!hidenInputName){
                hidenInputName = inputName;
            }

            var imageSection = $("<section class='image-section image-loading'></section>");
            var imageShade   = $("<div class='image-shade'></div>");
            var imageShow    = $("<img class='image-show image-opcity' />");
            var imageInput   = $("<input class='" + inputName + "' name='" + hidenInputName + "[]' value='' type='hidden'>");
            var imageZoom    = $("<div class='image-zoom'></div>");
            var imageDelete  = $("<div class='image-delete'></div>");

            imageBox.prepend(imageSection);

            imageShade.appendTo(imageSection);
            imageDelete.appendTo(imageSection);
            // 判断是否开启缩放功能
            if(config.zoom && config.zoom === true ){
                imageZoom.appendTo(imageSection);
            }

            imageShow.appendTo(imageSection);
            imageInput.appendTo(imageSection);

            return imageSection;

        };

        var createImageZoom = function () {

            var zoomShade   = $("<div id='zoom-shade'></div>");
            var zoomBox = $("<div id='zoom-box'></div>");
            var zoomContent = $("<div id='zoom-content'><img src='http://www.jq22.com/demo/jqueryfancybox201707292345/example/4_b.jpg'></div>");

            uploadBox.append(zoomShade);
            uploadBox.append(zoomBox);

            zoomContent.appendTo(zoomBox);

            // 显示弹框
            imageBox.delegate(".image-zoom","click",function(){

                var src = $(this).siblings('img').attr('src');
                zoomBox.find('img').attr('src', src);

                zoomShade.show();
                zoomBox.show();

            });

            // 关闭弹窗
            uploadBox.delegate("#zoom-shade","click",function(){

                zoomShade.hide();
                zoomBox.hide();

            });

        };

        //获取上传文件的后缀名
        var getFileExt = function(fileName){
            if (!fileName) {
                return '';
            }

            var _index = fileName.lastIndexOf('.');
            if (_index < 1) {
                return '';
            }

            return fileName.substr(_index+1);
        };

        //是否是允许上传文件格式
        var isAllowFile = function(fileName, allowType){

            var fileExt = getFileExt(fileName).toLowerCase();
            if (!allowType) {
                allowType = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
            }

            if ($.inArray(fileExt, allowType) != -1) {
                return true;
            }
            return false;

        };

        // 判断是否开启缩放功能
        if(config.zoom && config.zoom === true ){
            createImageZoom();
        }

        createDeleteModal();

    };

})(jQuery);

 images     

 

布局html样式

<div class="upload-box">
    <p class="upload-tip">测试上传</p>
    <div class="image-box clear">
        <section class="upload-section">
            <div class="upload-btn"></div>
            <input type="file" name="file" class="upload-input" id='js_uploadBtn' value=""/>
        </section>
    </div>
</div>

 js文件

<script type="text/javascript">
$("#js_uploadBtn").ajaxImageUpload({
    url: '__ACTION__', //上传的服务器地址
    data: { name:'测试' },
    maxNum: 2, //允许上传图片数量
    hidenInputName:'', // 上传成功后追加的隐藏input名,注意不要带[],会自动带[],不写默认和上传按钮的name相同
    zoom: true, //允许上传图片点击放大
    allowType: ["gif", "jpeg", "jpg", "bmp",'png'], //允许上传图片的类型
    maxSize :2, //允许上传图片的最大尺寸,单位M
    before: function () {
        alert('上传前回调函数');
    },
    success:function(data){
        alert('上传成功回调函数');
        console.log(data);
    },
    error:function (e) {
        alert('上传失败回调函数');
        console.log(e);
    }
});
</script>

 ========

 

posted @ 2018-03-19 09:26  navyyouth  阅读(2122)  评论(0编辑  收藏  举报