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实现框架(一)
Oct 09 PHP
第十三节 对象串行化 [13]
Oct 09 PHP
php 设计模式之 工厂模式
Dec 19 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
基于Zookeeper的使用详解
May 02 PHP
php合并js请求的例子
Nov 01 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
setAttribute 与 class冲突解决
2008/02/17 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
ionic3 懒加载
2017/08/16 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python中内建函数的简单用法说明
2016/05/05 Python
python基础教程之Filter使用方法
2017/01/17 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
自荐信怎么写呢?
2013/12/09 职场文书
企业法人授权委托书
2014/04/03 职场文书
搞笑爱情保证书
2014/04/29 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
公务员个人年终总结
2015/02/12 职场文书
总结Python使用过程中的bug
2021/06/18 Python
Java 数组内置函数toArray详解
2021/06/28 Java/Android