多图上传控制器及模型代码(2)thinkphp5+layui实现多图上传保存到数据库,可以实现图片自由排序,自由删除。

公共css代码

<style>
.layui-upload-img { width: 90px; height: 90px; margin: 0; }
.pic-more { width:100%; left; margin: 10px 0px 0px 0px;}
.pic-more li { width:90px; float: left; margin-right: 5px;}
.pic-more li .layui-input { display: initial; }
.pic-more li a { position: absolute; top: 0; display: block; }
.pic-more li a i { font-size: 24px; background-color: #008800; }
#slide-pc-priview .item_img img{ width: 90px; height: 90px;}
#slide-pc-priview li{position: relative;}
#slide-pc-priview li .operate{ color: #000; display: none;}
#slide-pc-priview li .toleft{ position: absolute;top: 40px; left: 1px; cursor:pointer;}
#slide-pc-priview li .toright{ position: absolute;top: 40px; right: 1px;cursor:pointer;}
#slide-pc-priview li .close{position: absolute;top: 5px; right: 5px;cursor:pointer;}
#slide-pc-priview li:hover .operate{ display: block;}
</style>

  

多图上传页面html代码

<div class="layui-form-item" id="pics">
  <div class="layui-form-label">相册图集</div>
  <div class="layui-input-block" style="width: 70%;">
    <div class="layui-upload">
      <button type="button" class="layui-btn layui-btn-primary pull-left" id="slide-pc">选择多图</button>
      <div class="pic-more">
        <ul class="pic-more-upload-list" id="slide-pc-priview">
        </ul>
      </div>
    </div>
  </div>
</div>

公共JS代码

<script>
         layui.use(‘upload‘, function(){
         var $ = layui.jquery;
         var upload = layui.upload;
 upload.render({
     elem: ‘#slide-pc‘,
     url: ‘{:url(‘admin/common/upload‘)}‘,
     size: 500,
     exts: ‘jpg|png|jpeg‘,
     multiple: true,
     before: function(obj) {
         layer.msg(‘图片上传中...‘, {
                icon: 16,
                shade: 0.01,
                time: 0
            })
     },
     done: function(res) {
        layer.close(layer.msg());//关闭上传提示窗口
         if(res.status == 0) {
             return layer.msg(res.message);
         }
         //$(‘#slide-pc-priview‘).append(‘<input type="hidden" name="pc_src[]" value="‘ + res.filepath + ‘" />‘);
         $(‘#slide-pc-priview‘).append(‘<li class="item_img"><div class="operate"><i class="toleft layui-icon">《</i><i class="toright layui-icon">》</i><i  class="close layui-icon"><img style="height: 32px;width: 32px;" src="__PUBLIC_ADMIN/del.png"></i></div><img src="__STATIC__/../‘ + res.filepath + ‘" class="img" ><input type="hidden" name="pc_src[]" value="‘ + res.filepath + ‘" /></li>‘);
     }
 });
});
//点击多图上传的X,删除当前的图片
$("body").on("click",".close",function(){
    $(this).closest("li").remove();
  });
 //多图上传点击<>左右移动图片
  $("body").on("click",".pic-more ul li .toleft",function(){
    var li_index=$(this).closest("li").index();
    if(li_index>=1){
      $(this).closest("li").insertBefore($(this).closest("ul").find("li").eq(Number(li_index)-1));
    }
  });
  $("body").on("click",".pic-more ul li .toright",function(){
    var li_index=$(this).closest("li").index();
    $(this).closest("li").insertAfter($(this).closest("ul").find("li").eq(Number(li_index)+1));
  });
</script>

  

上传接口代码

//通用缩略图上传接口
    public function upload()
    {
       if($this->request->isPost()){
                 $res[‘code‘]=1;
                 $res[‘msg‘] = ‘上传成功!‘;
                 $file = $this->request->file(‘file‘);
                 $info = $file->move(‘../public/upload/admin/‘);
                 //halt( $info);
                 if($info){
                     $res[‘name‘] = $info->getFilename();
                     //$res[‘filepath‘] = ‘upload/admin/‘.$info->getSaveName();
                     $res[‘filepath‘] = ‘upload/admin/‘.str_replace(‘\\‘,‘/‘,$info->getSaveName());
                 }else{
                     $res[‘code‘] = 0;
                     $res[‘msg‘] = ‘上传失败!‘.$file->getError();
                 }
                 return $res;
             }
    }

  

控制器代码

//添加
     public function add()
     {
         if(request()->isPost())
         {
             //dump(input(‘post.‘));
             $res = $this->db->tianjia(input(‘post.‘));
             if($res[‘valid‘])
             {
                    $this->success($res[‘msg‘]);
             }else{
                    $this->error($res[‘msg‘]);
             }
         }
         return $this->fetch();
     }
 //修改
	 		public function edit(){
	 			if(request()->isPost())
	 		{
	 			//halt($_POST);
	 			$res = $this->db->edit(input(‘post.‘));
	 		 if($res[‘valid‘])
	 			{
	 				//执行成功
	 				$this->success ( $res[ ‘msg‘ ] );
	 			}else{
	 				$this->error( $res[ ‘msg‘ ] );
	 			}

	 		}
	 		 $cp_id = input(‘param.cp_id‘);
			 //halt($cp_id);
	 		 $oldData = db(‘chanpin‘)->find($cp_id);
			 $oldData[‘pics‘]= json_decode($oldData[‘pics‘],true);//加true会输出数组,否则输出对象
			 //halt($oldData);
	 		 $this->assign( ‘oldData‘ , $oldData );
	 			return $this->fetch();
	 		}

  

模型代码

//添加
    public function tianjia($data)
    {
        //halt($data);
        $count = count($data[‘pc_src‘]);//获取传过来有几张图片
        if($count){
            for($i = 0;$i< $count;$i++){
                $data[‘pics‘][]=array("src"=>$data[‘pc_src‘][$i]);
            }
            $data[‘pics‘] = json_encode($data[‘pics‘]);
            //$data[‘cc‘] = json_decode($data[‘bb‘]);
            //halt($data);
        }

        $result = $this->validate(true)->allowField(true)->save($data);
        if($result){
            // 验证失败 输出错误信息
            return [‘valid‘=>1,‘msg‘=>‘添加成功‘];
            //dump($this->getError());
        }else{
            return [‘valid‘=>0,‘msg‘=>$this->getError()];
        }
    }
//修改
/**
	 * 编辑
	 */
	public function edit ($data)
	{
		$count = count($data[‘pc_src‘]);//获取传过来有几张图片
		//halt($count);
		if($count){
			for($i=0;$i<$count;$i++){
				$data[‘pics‘][]=array("src"=>$data[‘pc_src‘][$i]);
			}
			$data[‘pics‘] = json_encode($data[‘pics‘]);
			//$data[‘cc‘] = json_decode($data[‘bb‘]);
			//halt($data);
		}
		//allowField过滤post数组中的非数据表字段数据
		$res = $this->validate( true )->allowField(true)->save( $data , [ $this->pk => $data[ ‘cp_id‘ ] ]);
		if ($res) {
			return [ ‘valid‘ => 1 , ‘msg‘ => ‘操作成功‘ ];
		}
		else {
			return [ ‘valid‘ => 0 , ‘msg‘ => ‘操作失败‘];
		}
	}

  

编辑页面html代码

<div class="layui-form-item" id="pics">
  <div class="layui-form-label">相册图集</div>
  <div class="layui-input-block" style="width: 70%;">
    <div class="layui-upload">
      <button type="button" class="layui-btn layui-btn-primary pull-left" id="slide-pc">选择多图</button>
      <div class="pic-more">
        <ul class="pic-more-upload-list" id="slide-pc-priview">
          {foreach name="oldData[‘pics‘]" item="vo" key="k"}
          <li class="item_img">
            <div class="operate"><i class="toleft layui-icon">》</i><i class="toright layui-icon">《</i><i  class="close layui-icon"><img style="height: 32px;width: 32px;" src="__PUBLIC_ADMIN/del.png"></i></div>
            <img src="__STATIC__/../{$vo.src}" class="img" >
            <input type="hidden" name="pc_src[]" value="{$vo.src}" />
          </li>
          {/foreach}
        </ul>
      </div>
    </div>
  </div>
</div>

  JS代码

<script>
     layui.use(‘upload‘, function(){
 			var $ = layui.jquery;
       var upload = layui.upload;	

 			var uploadInst = upload.render({
 				elem:‘#btn-thumb‘,
 				url: "{:url(‘admin/common/upload‘)}",//上传接口
 				size:500,
 				exts: ‘jpg|png|jpeg‘,
 				before: function(obj){
 					obj.preview(function(index, file, result){
 						$(‘#thumb-preview‘).attr(‘src‘,result);
 						});
 					},
 					done: function(res){
 						console.log(res);
 						if(res.code == 0){
 							return layer.msg(res.message);
 						}
 						$(‘#input-thumb‘).val(res.filepath);
 					}
 });
 			 });
  </script> 

 <!--多图上传-->
  <script>
  		layui.use(‘upload‘, function(){
  		var $ = layui.jquery;
  		var upload = layui.upload;	 			

  upload.render({
  	elem: ‘#slide-pc‘,
  	url: ‘{:url(‘admin/common/upload‘)}‘,
  	size: 500,
  	exts: ‘jpg|png|jpeg‘,
  	multiple: true,
  	before: function(obj) {
  		layer.msg(‘图片上传中...‘, {
 				icon: 16,
 				shade: 0.01,
 				time: 0
 			})
  	},
  	done: function(res) {
 		layer.close(layer.msg());//关闭上传提示窗口
  		if(res.status == 0) {
  			return layer.msg(res.message);
  		}
  		//$(‘#slide-pc-priview‘).append(‘<input type="hidden" name="pc_src[]" value="‘ + res.filepath + ‘" />‘);
  		$(‘#slide-pc-priview‘).append(‘<li class="item_img"><div class="operate"><i class="toleft layui-icon"></i><i class="toright layui-icon"></i><i  class="close layui-icon"></i></div><img src="__STATIC__/../‘ + res.filepath + ‘" class="img" ><input type="hidden" name="pc_src[]" value="‘ + res.filepath + ‘" /></li>‘);
  	}
  });
 });
 //点击多图上传的X,删除当前的图片
 $("body").on("click",".close",function(){
     $(this).closest("li").remove();
   });
  //多图上传点击<>左右移动图片
   $("body").on("click",".pic-more ul li .toleft",function(){
     var li_index=$(this).closest("li").index();
     if(li_index>=1){
       $(this).closest("li").insertBefore($(this).closest("ul").find("li").eq(Number(li_index)-1));
     }
   });
   $("body").on("click",".pic-more ul li .toright",function(){
     var li_index=$(this).closest("li").index();
     $(this).closest("li").insertAfter($(this).closest("ul").find("li").eq(Number(li_index)+1));
   });
 </script>
 <script>
      layui.use([‘layer‘, ‘form‘], function() {
          var layer = layui.layer,
              $ = layui.jquery,
              form = layui.form;
          $(window).on(‘load‘, function() {
              form.on(‘submit(edit)‘, function(data) {
                  $.ajax({
                      url:"{:url(‘admin/chanpin/edit‘)}",
                      data:$(‘#form‘).serialize(),
                      type:‘post‘,
                      async: false,
                      success:function(res) {
                          if(res.code == 1) {
                              layer.msg(res.msg, {‘icon‘: 1});
                              setTimeout(function () {
                              		parent.window.location.reload();
                              }, 1000);
                          } else {
                              layer.msg(res.msg);
                          }
                      }
                  })
                  return false;
              });
          });
      });
    </script>

  

原文地址:https://www.cnblogs.com/yehuisir/p/10851880.html

时间: 2024-10-11 07:14:44

多图上传控制器及模型代码(2)thinkphp5+layui实现多图上传保存到数据库,可以实现图片自由排序,自由删除。的相关文章

thinkphp+layui多图上传(1)thinkphp5+layui实现多图上传保存到数据库,可以实现图片自由排序,自由删除。

公共css代码 <style> .layui-upload-img { width: 90px; height: 90px; margin: 0; } .pic-more { width:100%; left; margin: 10px 0px 0px 0px;} .pic-more li { width:90px; float: left; margin-right: 5px;} .pic-more li .layui-input { display: initial; } .pic-mor

ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)

在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求.通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定.因此我们就要让这些文件上传框动态添加,下面我以我做的一个图库管理中的上传图片的功能为例 默认是上传一个图片,但当我们点“增加图片”按钮时可以实现选择多个图片及其描述同时上传,本功能限制一次最多只能上传8张,且每张图片大小不超过1M,这个大家可根据实际情况更改! 第一步,使用javascript代码实现动态添加文

git查看本地和创建分支、上传分支、提交代码到分支、删除分支等

以下是git命令行里边的命令操作,加上了说明: Welcome to Git (version 1.9.5-preview20141217) Run 'git help git' to display the help index. Run 'git help <command>' to display help for specific commands. ##进入项目目录下 giscafer@LAOHOUBIN-PC /G/002_project $ cd Comments ##查看远程分

C# FTP上传文件至服务器代码

C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件</param> /// <param name="targetDir">目标路径</param> /// <param name="hostname">ftp地址</param&g

jq表单上传多文件 前后台代码

Html>>>>>>>>> <form id="Job_Notice_Form"  method="post" enctype="multipart/form-data"> <div id="f" > <div id="zhi"> <div style="display:none"> &

图片上传即时显示javascript代码

1.首先是javascript代码 /** * 图片上传即时显示javascript */ var allowExt = [ 'jpg', 'gif', 'bmp', 'png', 'jpeg' ]; var preivew = function(file, container) { try { var pic = new Picture(file, container); } catch (e) { alert(e); } }; // 缩略图类定义 var Picture = function

.NET CORE上传文件到码云仓库【搭建自己的图床】

.NET CORE上传文件到码云仓库[搭建自己的图床] 先建一个公共仓库(随意提交一个README文件或者.gitignore文件保证master分支的存在),然后到gitee的个人设置页面找到[私人令牌]菜单创建一个access_token.Gitee官方还友好的提供了基于swagger的API文档和调试页面: https://gitee.com/api/v5/swagger#/postV5ReposOwnerRepoContentsPath 搭建步骤 1.新建一个名为imagebed的仓库

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据 在本章中,我们将新建一个MoviesController 控制器,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. 在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错. 在解决方法资源管理器的Controllers文件夹右键,选择"添加">"新建搭建基架项": 在"添加支架"对话框,选择 包含视图的MVC 5控制器(使用 En),然后单击

Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据

Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现影片数据的功能.在进行下步之前,点击“生成应用程序“对应用程序进行编译.右键单击Controllers文件夹,新建一个名为“MoviesController ”的控制器.在创建窗口各选项如下图所示 点击添加,将创建以下文件和文件夹: 项目的 Controllers 文件夹下新增MoviesContr