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 Injection with MySQL
Feb 27 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php导出excel格式数据问题
Mar 11 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
thinkphp模板的包含与渲染实例分析
Nov 26 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
详解PHP中的null合并运算符
Dec 30 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP中“=&gt;
Mar 01 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
php报错502badgateway解决方法
2019/10/11 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
Javascript中的包装类型介绍
2015/04/02 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
python提取xml里面的链接源码详解
2019/10/15 Python
使用Python发现隐藏的wifi
2020/03/04 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
测绘工程专业个人自我评价
2013/12/01 职场文书
土建施工员岗位职责
2014/07/16 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
使用golang编写一个并发工作队列
2021/05/08 Golang
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs