直接上个例子,其中包括有单图片文件上传、多图片文件上传、以及删除文件的一些操作、放置删除数据库的时候,仅仅删除掉了数据库之中的文件路径、而不是一并删除服务器之中的文件、放置服务器爆炸、、、

TP里面common文件夹里面function.php里面自定义方法:

  

<?php
//文件上传类(可以设置多个参数)
function upload($file=null,$maxSize=0,$exts=0,$savePath='')
{
    //调用
    $upload = new \Think\Upload();// 实例化上传类
    $upload->maxSize   = $maxSize;// 设置附件上传大小
    $upload->exts      = $exts; //array('jpg', 'gif', 'png', 'jpeg'); 设置附件上传类型
    $upload->savePath  = $savePath; // 设置附件上传目录
	// 上传文件
    //如果单个文件还是多个文件
    if($file){
      $info = $upload->uploadOne($file);
    }else{
    $info = $upload->upload();
    }
    //判定是否文件上传成功de
    if(!$info) {
		return false;
    }else{
	// 上传成功,
		return $info;
	}
}

//上传图片
function fab_upload($files ,$maxSize = 0,$exts = null,$savePath = '')
{
        //判定文件信息是否为空
    if(empty($files)){
        return false;
    }
    if($exts === null){
        $exts = array('jpg', 'gif', 'png', 'jpeg');
    }else{
        $exts = 0;
    }
    $tmp = array();
    //将文件信息(数组)用foreach循环遍历,
    foreach($files as $k => $v){
                //判定文件大于0之后,将遍历value作为参数传入upload方法
        if($v['size'] > 0){

            $res = upload($v,$maxSize,$exts,$savePath);
                            //如果传入成功就会将文件存储路径传入数组$tmp[]之中
            if($res){
                $tmp[$k] = $res['savepath'].$res['savename'];
            }
        }
    }
            //将存储传入文件路径的数组return回去
    return $tmp;
}

?>

其实无论哪个文件上传、都是需要用$_FILES变量区操控的、

上面的方法是fab_upload调用upload方法的;

在HTML上我们表单是酱紫写的:

<form action="{:U('Index/infoupload')}" method="post"style="overflow: hidden;clear: both;" enctype="multipart/form-data">

<div class="contact_r col-md-4">
                    <label class="contact_rc contact_file"><span><b>入台證:</b><input class="inp_zj1" type="file" name="rutaiimg" ></span></label>
                    <!-- <a class="contact_sp fancybox" href="images/txz1.jpg" >如圖示</a> -->
                </div>
                <div class="contact_r col-md-4">
                    <label class="contact_rc contact_file"><span><b>通行證:</b><input class="inp_zj2" type="file" name="tongxingimg" ></span></label>
                    <!-- <a class="contact_sp fancybox" href="images/txz1.jpg" >如圖示</a> -->
                </div>
</form>

控制器之中如何处理上传的文件(拼接路径以及文件名、还有入库失败需要删除文件,类似回调)

 /*调用写好的方法进行验证*/
             $new_thumb = fab_upload($_FILES);
             // var_dump($new_thumb);die;
             $input['data']['addtime']=time();//生成申请时间
             $input['data']['pretime']=strtotime($input['data']['pretime']);//将传过来的日期转换成时间戳
             if($new_thumb && count($new_thumb) > 0){
                 $input['data'] = array_merge($input['data'],$new_thumb);
             }
             $f = $customer->add($input['data']);
             if($f){
                 $this->display('Index/infosuccess');
                 // $this->success("添加成功!",U('Index/infocheck',array('iccid'=>$input['data']['iccid'])));
             }else{//数据添加失败即删除照片
                 if($new_thumb){
                     $p = C('UNLINK_PATH').$new_thumb;
                     unlink($p);
                 }
                 $this->error("添加失败!证件可能已存在");
             }

其中UNLINK_PATH变量在ThinkPHP之中的config文件里面定义、是路径来的

<?php
return array(
    'DB_TYPE'   => 'mysql', // 数据库类型
    'DB_HOST'   => 'localhost', // 服务器地址
    'DB_NAME'   => 'urban', // 数据库名
    'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => '123456', // 密码
    'DB_PORT'   => 3306, // 端口
    'DB_PREFIX' => 'fab_', // 数据库表前缀
    'DB_CHARSET'=> 'utf8', // 字符集
    'CHECK_ROOT' => true,  //开启rbac权限
    'TMPL_CACHE_ON' =>  false,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'ACTION_CACHE_ON'  => false,  // 默认关闭Action 缓存
    'HTML_CACHE_ON'   => false,   // 默认关闭静态缓存
    'FILE_PATH'=>'http://localhost/urban/Uploads/',
    'WEB_PATH'    =>    'http://localhost/urban/index.php/',
    'WEB_URL'    =>    'http://localhost/urban/',
    'UNLINK_PATH'    =>    './Uploads/',
    'PWD_KEY'   =>  'jeiskAsdlLsdfqaiocvwphxzbtu',
    'AUTO_LOGIN_TIME'=>3600 * 24 * 7,
    'SHOW_PAGE_TRACE'=>true, //追踪模式
    'MY_CATCH_DIR' =>'./cache/', //缓存目录
    'CODE_PATH' =>'http://localhost/urban/fabp/phpqrcode/',    // 存放二维码的目录
    'qq_face' =>'http://localhost/urban/Public/site/images/arclist/',     //qq表情路径
    'wxlogin' => array(
        'appid' => 'wx35f5b9e9b90539ae',
        'AppSecret' => '4de424bee1529a8abeda9c0c52aad3aa',
        'callback' => 'http://localhost/urban/index.php/Home/Login/call_back.html'
        ),
    'topic_pass'=>false,    //是否开启话题审核
);

当添加以后,自然需要在后台管理模块上添加删除的function

  上面的显示图片的时候,用HTTP协议的绝对路径拼接出来显示图片;

  而删除图片则是,以入口文件index.php为准,是当前文件夹下面的upload文件夹;

  记住调用ThinkPHP之中的upload、uploadone方法返回来的只是上传文件在upload文件夹下面的存储位置、“'2016-09-02/57c94e71f0916.png'”(入库也这个吧)

  所以无论删除还是显示都需要用C方法拼接一下

if(IS_POST){
                $input=I('post.');
                $ids=implode(',',$input['id']);
                $brand=D('brand');
                $img=$brand->where("brand_id in ($ids)")->getField('thumb',true);
                foreach($img as $v){
                    $p = C('UNLINK_PATH').$v;
                    unlink($p);
                }
                $res=$brand->where("brand_id in ($ids)")->delete();

                if($res){
                    $this->success("删除运营商品牌成功!");
                }else{
                    $this->error("删除运营商品牌失败!");
                }

            }

之所以用了那个foreach;是因为传过来的id不是唯一一个;是多选,删除;

多选,并且传过去相应栏目ID的值是如何实现的呢

                  <foreach name="list" item="v">
                                    <tr>
                                        <td class="center" width="80px">
                                            <label>
                                                <input type="checkbox" class="ace" name="id[]" value="{$v.brand_id}"/>
                                                <span class="lbl"></span>
                                            </label>
                                        </td>
                                        <td>{$v.brand_name}</td>
                                    </tr>
                                </foreach>                      <tr>                                        <td colspan="2">                                            <button class="btn btn-xs btn-danger" onclick="return tijiao('del')">                                                <i class="icon-trash bigger-110"></i>                                                删除                                            </button>                                          </td>                                    </tr>

上面删除的javascript方法是这样写的:

<script type="text/javascript">
function tijiao(type){
    if(type == 'del'){
        $('#my_form').attr('action',"{:U('Admin/Brand/brand_del')}");
    }else if(type == 'sort'){
        $('#my_form').attr('action',"{:U('Admin/Brand/brand_sort')}");
    }
    return true;
}
</script>

附加:其实判定文件是否有上传最好用这个数据:
$_FILES['input_name']['size']是否大于零;

ThinkPHP之中的图片上传操作的更多相关文章

  1. ThinkPHP示例:图片上传

    ThinkPHP示例之图片上传,包括图片上传.数据库保存.缩略图生成以及图片水印功能演示.首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置.导入示例目录下面 ...

  2. thinkphp3.2.3 ueditor1.4.3 图片上传操作,在线删除上传图片功能。

    最近弄一个图片 上传,可是用ueditor 自带的上传,如果不配置的话,上传的目录不在自己的项目中. 在网上找了好多,可是都是底版本的,新版本的还真是找到了一个,ueditor-thinkphp 这个 ...

  3. 使用ThinkPHP+Uploadify实现图片上传功能

    首先,将下载的Uploadify压缩包解压放到公共文件夹内.实现代码如下: 前台html部分: <script src="/uploadify/jquery.min.js" ...

  4. h5 canvas 图片上传操作

    最近写的小 demo,使用的是h5的 canvas来对图片进行放大,移动,剪裁等等这是最原始的代码,比较接近我的思路,后续会再对格式和结构进行优化 html: <pre name="c ...

  5. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  6. ASP.NET WebApi 图片上传

    以下是代码的实现过程: Html页面表单布局: <form id="UpPicture" enctype="multipart/form-data" ac ...

  7. Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传

    在 ThinkPHP 3.2.3 中集成百度编辑器最新版 Ueditor 1.4.3.1,同时将编辑器自带的上传类替换成 ThinkPHP 3.2.3 中的上传类. ① 下载编辑器(下载地址:http ...

  8. ThinkPHP图片上传

    ThinkPHP是国内比较流行的轻量级的PHP框架,它在国内流行的一个最主要的因素在于它的说明文档非常健全完善,以及它源码内的注释都是中文的,方便于英语能力较差的程序员学习. 图片上传在网站里是很常用 ...

  9. thinkphp达到UploadFile.class.php图片上传功能

    片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...

随机推荐

  1. Mingyang.net:java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()

    使用hibernate-validator校验数据模型时报出如下异常: java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInsta ...

  2. java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1.基本类型:short 二进制位数:16包装 ...

  3. 菜鸟-手把手教你把Acegi应用到实际项目中(2)

    上一篇是基于BasicProcessingFilter的基本认证,这篇我们改用AuthenticationProcessingFilter基于表单的认证方式. 1.authenticationProc ...

  4. 《Code Complete》ch.20 软件质量概述

    WHAT & WHY ? 软件质量的特性 外在特性 正确性(Correctness) 可用性(Usability) 效率(Efficiency) 可靠性(Reliability) 完整性(In ...

  5. HDU 3062 Party

    Party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. sqlserver 批量删除存储过程和批量修改存储过程的语句

    sqlserver 批量删除存储过程和批量修改存储过程的语句- sqlserver 批量删除存储过程和批量修改存储过程的语句,需要的朋友可以参考下. - 修改: 复制代码 代码如下: declare ...

  7. 在内核中增加对yaffs文件系统的支持

    自己最近在搞一些内核以及根文件系统的移植,就涉及到了需要在内核中增加对yaffs文件系统的支持.在网上找了一些文档后,自己将具体的操作过程做了一个总结,方便以后查询使用: 1.获取yaffs源码 YA ...

  8. ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

    ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法 今天遇到的一个问题: 直接修改数据表中的某些字段数据内容时报错: ORA-01461: 仅可以为插入 LONG 列的 L ...

  9. 异常System.Web.HttpException (0x80004005): Server cannot set status after HTTP headers have been sent.

    在用mvc 的AuthorizeAttribute做身份验证,重写HandleUnauthorizedRequest方法,在Application_Error方法里出现异常System.Web.Htt ...

  10. ios frame bounds applicationframe

    ios里面的[uiscreen mainscreen]获得的frame是应用的frame大小,不包含status bar,所以高度会少20,但是self.view的frame就是表示整个可视的窗口的大 ...