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

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. Excel粘贴到textarea换行符替换

    复制到→ Excel列表的内容复制到textarea中后,前台取到的文本是这样的: chrome监视显示 console.log输出 现在需要将excel中的每行数据拼接起来用“;”隔开,方法如下: ...

  2. angularJs的ui-router总结

    一:跑通ui-router. ui-router源码在最后面 跑通后的样子: 这个不解释了,都是很基本的东西. 二:切换视图: 这里的name可以不写,但是你得放到state的第一个参数里. 跑起来后 ...

  3. Inno Setup命令行安装卸载参数

    安装命令行参数安装程序接受可选的命令行参数.这些对于系统管理员以及其它程序调用安装程序时有用./SP- 在安装开始时禁用“这将安装... 你想继续吗?”的提示,当然,如果 [Setup] 段的指令 D ...

  4. [转载]python中将普通对象作为 字典类(dict) 使用

    目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __ ...

  5. [SQL]patindex的用法

    返回指定表达式中某模式第一次出现的起始位置:如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零. Transact-SQL 语法约定 语法 PATINDEX ( '%pattern%' , ...

  6. Log4日志配置及使用

    1.log4j.xml <?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE log4j:co ...

  7. FZU Problem 2136 取糖果

     Problem 2136 取糖果 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 有N个袋子放成一排,每个 ...

  8. 翻译:深入 AngularUI Router

    原文地址:http://www.ng-newsletter.com/posts/angular-ui-router.html ui-router: https://angular-ui.github. ...

  9. 在 Visual Studio 2013 中使用 Grunt, Bower 和 NPM

    在 Visual Studio 2015 中提供了对于 Grunt 和 Gulp 的内置支持,在 Visual Studio 2013 中怎么办呢?微软将 2015 中的特性作为几个独立的扩展发布出来 ...

  10. 初探接口测试框架--python系列4

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...