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中的array数组类型分析说明
Jul 27 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
php绘制一条弧线的方法
Jan 24 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
隐性调用php程序的方法
Jun 13 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
php 获取文件行数的方法总结
Oct 11 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
php-msf源码详解
Dec 25 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
如何通过命令行进入python
2020/07/06 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
python Xpath语法的使用
2020/11/26 Python
python 模拟登陆163邮箱
2020/12/15 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
汽车运用工程毕业生自荐信
2013/10/29 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
药品采购员岗位职责
2014/02/08 职场文书
医疗纠纷协议书
2014/04/16 职场文书
建议书的格式
2014/05/12 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
java实现对Hadoop的操作
2021/07/01 Java/Android
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL