thinkPHP利用ajax异步上传图片并显示、删除的示例


Posted in PHP onSeptember 26, 2018

近来学习tp5的过程中,项目中有个发帖功能,选择主题图片。如下:

thinkPHP利用ajax异步上传图片并显示、删除的示例

利用原始的文件上传处理,虽然通过原始js语句能实时显示上传图片,但是这样的话会涉及很多兼容问题。使用ajax技术,实现选择性删除所选图片功能,并不会有兼容问题。

表单文件form:

<form method="post" enctype="multipart/form-data">
<div style="margin: 20px 20px 20px 10px;">
  主题图片:
  <span id="img-list-box" style="margin-left: 25px;"></span>
  <span style="display:inline-block;height: 30px;position: relative;top:0px;left:0px;">
    <a style="display: inline-block;width: 100px;height:30px;line-height: 30px;text-align:center;background: #F60;color: #FFF;">图片上传</a>
    <input type="file" name="img_src" style="width: 100px;border: 1px solid red;position: absolute;top:0px;left: 0px;height: 30px;opacity: 0;" id="up-img-file" onchange="upimg(this)">
   </span>
</div>
</form>

需要发送Ajax请求的话,当然表单是不能实现我们的需求的,因此,我们需要给表单关联一个单击事件去帮我们进行Ajax请求并选择图片。

当我们点击上传图片这个button按钮时触发选择图片实现Ajax上传

JavaScript代码:

<script type="text/javascript" src="__STATIC__/home/js/jquery.min.js"></script>
<script type="text/javascript">
  function upimg(obj)
  {
    if( obj.value == "" ) {
      return;
    }
    var formdata = new FormData();
    //<input type="file" name="img" value="" />
    formdata.append("img" , $(obj)[0].files[0]);//获取文件法二
    $.ajax({
      type : 'post',
      url : '/home/note/upimg', //接口
      data : formdata,
      cache : false,
      processData : false, // 不处理发送的数据,因为data值是Formdata对象,不需要对数据做处理
      contentType : false, // 不设置Content-type请求头
      success : function(response){
        console.log(response);
        var html = '<div style="position: relative;margin-right: 20px;margin-bottom: 15px;width: 132px;display: inline-block;border: 1px solid #CCC;background:#EEE;">'
            +'<span style="display: block;width: 120px;height: 80px;border: 1px solid #F2F1F0;margin: 5px;overflow: hidden;">'
            +'<img src="'+response+'" style="width: 100%;" />'
            +'</span>'
            +'<input type="hidden" name="imgs[]" value="'+response+'" />'
            +'<a onclick="delImg(this);" style="z-index: 10;display: block;top: -8px;cursor:pointer;right: -8px;position:absolute;width: 20px;height: 20px;background: #CCC;border-radius:100%;text-align:center;line-height: 20px;border: 1px solid #C1C1C1;color: #555;">X</a>'
            +'</div>';

        $('#img-list-box').append(html);
      },
      error : function(){ }
    });
  }

  function delImg(obj)
  {
    $(obj).parent('div').remove();
  }
</script>

点击选择图片之后就是交给服务器端处理了。

php接口文件:

public function upimg()
  {
    //验证
    $file = request()->file('img');
    // 移动到框架应用根目录/public/uploads/ 目录下
    if($file){
      $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
      if($info){
        // 成功上传后 获取上传信息
        $img_src = '/uploads/'.$info->getSaveName();
        echo $img_src; //返回ajax请求
      }else{
        // 上传失败获取错误信息
        $this->error($file->getError());
      }
    }
  }

改善后的效果图:

thinkPHP利用ajax异步上传图片并显示、删除的示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php防止sql注入代码实例
Dec 18 PHP
2014过年倒计时示例
Jan 31 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
php获取excel文件数据
Apr 21 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
如何理解PHP核心特性命名空间
May 28 PHP
多个Laravel项目如何共用migrations详解
Sep 25 #PHP
php中上传文件的的解决方案
Sep 25 #PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 #PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 #PHP
详解php协程知识点
Sep 21 #PHP
在php的yii2框架中整合hbase库的方法
Sep 20 #PHP
php实现在线考试系统【附源码】
Sep 18 #PHP
You might like
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
python win32 简单操作方法
2017/05/25 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Python中的Numpy矩阵操作
2018/08/12 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
2014年党员自我评议对照检查材料
2014/09/20 职场文书
公司离职证明范本
2014/10/17 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
python如何在word中存储本地图片
2021/04/07 Python
Go语言实现Snowflake雪花算法
2021/06/08 Golang
mysql事务对效率的影响分析总结
2021/10/24 MySQL
python区块链持久化和命令行接口实现简版
2022/05/25 Python