tp上传文件

对于thinkPHP来说,我们上传文件时最好写一个模态窗口,这样使用起来也很方便。

先写一个按钮

<button class="btn btn-primary" data-toggle="modal" data-target="#myimport">

      <span class="glyphicon glyphicon-pencil"></span>&nbsp;&nbsp;导入</button>

模态窗口

 <form method="post" action="__URL__/upload" class="form-horizontal" role="form" id="myForm" οnsubmit="return " enctype="multipart/form-data">
        <div class="modal fade" id="myimport"  tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <!--  定义模态框,过渡效果为淡入,id为myModal,tabindex=-1可以禁用使用tab切换,aria-labelledby用于引用模态框的标题,aria-hidden=true保持模态框在触发前窗口不可见  -->
            <div class="modal-dialog">
                <!--  显示模态框对话框模型(若不写下一个div则没有颜色)  -->
                <div class="modal-content">
                    <!--  显示模态框白色背景,所有内容都写在这个div里面  -->
                    <div class="btn-info modal-header">
                        <!--  模态框标题  -->
                        <button type="button" class="close" data-dismiss="modal">&times;</button>
                        <!--  关闭按钮  -->
                        <h4>您好,请上传文件</h4>
                        <!--  标题内容  -->
                    </div>
                    <div class="modal-body">
                        <!--  模态框内容,我在此处添加一个表单 -->
                        <form class="form-horizontal" role="form">
                            <div class="form-group">
                                <input type="file" name="photo" />
                            </div> 
                        </form>
                    </div>
                    <div class="modal-footer">
                        <!--  模态框底部样式,一般是提交或者确定按钮 -->
                        <button type="submit" class="btn btn-info">确定</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                    </div>
                </div><!-- /.modal-content -->
            </div>
        </div> <!-- /.modal -->
    </form>

对于后台php,代码如下:

public function upload(){
           
            $upload = new \Think\Upload();//实例化上传类
            $upload->maxSize = 0;//设置附件上传大小
            $upload->exts = array('csv');//设置附件上传类型
            $upload->rootPath = './Public/Upload/';//设置附件上传根目录
            $upload->savePath = '';//设置附件上传(子)目录
            //上传文件
            $info = $upload->upload();
           
            if(!$info) {// 上传错误提示错误信息
                $this->error($upload->getError());
            }else{// 上传成功 获取上传文件信息
            foreach($info as $file){
                $this->success('上传成功!' . $file['savepath'].$file['savename'],'import',3);
                // echo $file['savepath'].$file['savename'];
            }          
        }
    }
        public function import(){
            $file = "./Public/Upload/2018-03-26/5ab86d50632ea.csv";
            $encoding = detect_encoding($file);
            // dump($encoding);
            // exit;
            if ($encoding != 'UTF-8') {
                $contens = file_get_contents($file);
                $contens = mb_convert_encoding($contens, 'utf-8', $encoding);
                file_put_contents($file, $contens);
            }
            $fp = fopen($file, 'r');


            if($fp){
                $fields = array('no','name','sex');
                // dump($fields);
                $model = M('student');
                
                $arrno = $model->getfield('no',true);
                // dump($arrno);
                $arr = array();
                while (($row=fgetcsv($fp,1000,','))!==false) {
                    $row = array_combine($fields, $row);
                    $row['py']= SpGetPinyin($row['name'],'UTF8');
                    if (in_array($row['no'], $arrno)) {
                        $file = "./Public/Upload/demo.txt";
                        $ret .= $row['no'] . '重复' . '<br>';
                        file_put_contents($file,$ret);
                    }else{
                        $arrno[] = $arr['no'];
                        $arr[] = $row;
                        $file = "./Public/Upload/demo.txt";
                        $ret1 .= $row['no'] . '成功' . '<br>';
                        file_put_contents($file,$ret1);
                    }
                    if (count($arr) == 1000) {
                        $model->addAll($arr);
                        unset($arr);
                    }

                }

 if (count($arr)>0) {
                    $model->addAll($arr);
                }
                $this->show('数据库添加成功','utf8'); 
                $this->success("",'index');
            }

       }  

如果只写以上代码,信息会直接写在网页中,为了避免这种情况,我们上传时通过先下载一个demo文件,所有信息都在demo文件中显示:

$file_name = "demo.txt";     //下载文件名    
                $file_dir = "./Public/Upload/";        //下载文件存放目录    
                //检查文件是否存在    
                if (! file_exists ( $file_dir . $file_name )) {    
                    echo "文件找不到";    
                    exit ();    
                } else {    
                    //打开文件    
                    $file = fopen ( $file_dir . $file_name, "r" );    
                    //输入文件标签     
                    Header ( "Content-type: application/octet-stream" );    
                    Header ( "Accept-Ranges: bytes" );    
                    Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );    
                    Header ( "Content-Disposition: attachment; filename=" . $file_name );    
                    //输出文件内容     
                    //读取文件内容并直接输出到浏览器    
                    echo fread ( $file, filesize ( $file_dir . $file_name ) );    
                    fclose ( $file );    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值