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生成月历代码
Jun 14 PHP
php5数字型字符串加解密代码
Apr 24 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
php实现简单的上传进度条
Nov 17 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
php中的登陆login实例代码
Jun 20 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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生成静态页面详解
2006/12/05 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
物业公司采购员岗位职责
2013/12/31 职场文书
停水通知
2015/04/16 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB