图片/文件上传 - layui.upload

图片/文件上传 - layui.upload

普通上传文件是借助 type="file" 的 input 标签来完成的, 这太low了

本文是利用 layui 做 两种情况下的图片上传 服务器端是ThinkPHP3.2

实例一: (点击上传即保存数据库)


upload.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>layui</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="/Public/layui/css/layui.css"  media="all">
  <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>

<div class="layui-upload">
  <button type="button" class="layui-btn" id="test1">上传图片</button>
  <div class="layui-upload-list">
    <img class="layui-upload-img" id="demo1" width="150px">
  </div>
</div>   
          
<script src="/Public/layui/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
<script>
layui.use('upload', function(){
  var $ = layui.jquery
  ,upload = layui.upload;
  
  //普通图片上传
  var uploadInst = upload.render({
    elem: '#test1'
    ,url: '{:U("Api/index/upload")}'
    ,before: function(obj){
      //预读本地文件示例,不支持ie8
      obj.preview(function(index, file, result){
        $('#demo1').attr('src', result); //图片链接(base64)
      });
    }
    ,done: function(res){
      //上传成功
        return layer.msg(res.msg,{icon: res.status,time: 2000});

    }
  });
   
});
</script>

</body>
</html>

upload()方法

public function upload()
    {
    	if(IS_AJAX){
    		$upload = new \Think\Upload();// 实例化上传类
            $upload->maxSize   =     1024*1024 ;// 设置附件上传大小
            $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 
            $upload->rootPath  =     './Public/'; // 设置附件上传根目录
            $upload->savePath  =     'img/'; // 设置附件上传(子)目录
            $info   =   $upload->upload();
            if(!$info) {// 上传错误提示错误信息
                $data['status']  = 5;
                $data['msg'] = $upload->getError();
            }else{// 上传成功
                $data['url'] = "/".$upload->rootPath.$info['file']['savepath'].$info['file']['savename'];
                $up_model=D('uploads');
                $up_model->url=$data['url'];
                if($up_model->add()){
                    $data['status']  = 1;
                    $data['msg'] = "上传成功";
                }else{
                    $data['status']  = 2;
                    $data['msg'] = "服务器繁忙";
                }
            }
            $this->ajaxReturn($data);
    	}
    	$this->display();
    }


实例二: (先点击选择文件, 再与其他表单数据一起提交)

uploads.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>layui</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="/Public/layui/css/layui.css"  media="all">
  <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>
          
 
<div class="layui-upload">
  <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
</div>
<div class="layui-upload-list">
    <img class="layui-upload-img" id="demo1" width="150px">
</div>
<button type="button" class="layui-btn" id="test9">开始上传</button>
 
          
<script src="/Public/layui/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
<script>
layui.use('upload', function(){
  var $ = layui.jquery
  ,upload = layui.upload; 
  
  //选完文件后不自动上传
  upload.render({
    elem: '#test8'
    ,url: '{:U("Api/index/upload")}'
    ,auto: false
    //,multiple: true
    ,choose: function(obj){
      console.log(obj)
      //预读本地文件示例,不支持ie8
      obj.preview(function(index, file, result){
        $('#demo1').attr('src', result); //图片链接(base64)
      });
    }
    ,bindAction: '#test9'
    ,done: function(res){
      console.log(res)
      return layer.msg(res.msg,{icon: res.status,time: 2000});
    }
  });

});
</script>

</body>
</html>

实测有效:


layui 文件上传 官方文档:  http://www.layui.com/doc/modules/upload.html

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 layui.upload 来通过图片相对路径上传默认图片的步骤如下: 1. 在 HTML 页面中引入 layui 相关的样式和脚本文件: ```html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui@2.5.7/dist/css/layui.css"> <script src="https://cdn.jsdelivr.net/npm/layui@2.5.7/dist/layui.js"></script> ``` 2. 创建一个文件上传的 input 元素: ```html <input type="file" name="file" id="uploadInput" style="display: none;"> ``` 3. 添加一个默认图片的预览区域: ```html <div id="previewContainer"> <img id="previewImage" src="images/default.jpg" alt="Default Image"> </div> ``` 4. 初始化 layui.upload: ```html <script> layui.use(['upload'], function(){ var upload = layui.upload; // 执行上传 var uploadInst = upload.render({ elem: '#previewContainer', url: '/upload', // 上传接口地址 accept: 'images', exts: 'jpg|jpeg|png|gif', // 允许上传的图片类型 done: function(res){ // 上传完毕回调 console.log(res); }, error: function(){ // 请求异常回调 } }); }); </script> ``` 在上面的代码中,我们初始化了 layui.upload,并指定了上传的接口地址、允许上传的图片类型、上传成功后的回调函数等。其中 `elem` 参数指定了点击预览区域时触发上传操作。 请注意,你需要将以上代码中的接口地址 `/upload` 替换为你实际的后端接口地址。在后端接口中,你可以根据上传的图片文件做相应的处理。 这样,当用户点击预览区域时,会触发上传操作,选择的图片会被上传到后端。在上传成功后,你可以在 `done` 回调函数中对上传结果进行处理。 希望以上步骤对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值