php-切片上传

   //切片上传
    /**
     * file_name 文件名称 xx.zip
       index 切片序号-从1开始
       count 总片数-最后的切片序号
       file 上传的文件
       uid 用户id
       --------------
        [file] => Array
        (
            [name] => xx.zip
            [type] => application/zip
            [tmp_name] => C:\WINDOWS\php34F9.tmp
            [error] => 0
            [size] => 207926
        )
     */
    public function add_file_qie(Request $request){
         
         if(!isset($_FILES['file'])){
            $this->code='400';
            $this->message='没有选择文件';
            $this->returninfo();
        }
        $this->arr=$request->input();
        $ext = strtolower(pathinfo($this->arr['file_name'], PATHINFO_EXTENSION));
        if(empty($ext) ||($ext!='rar'  &&$ext!='zip' &&$ext!='7z')){
            $this->code='400';
            $this->message='['.$ext.']文件格式错误';
            $this->returninfo();
        } 
        session_start();
        $s_id=session_id();//作为未登录用户标识,你也可以用其他的标识
        $this->arr['file_name']=trim($this->arr['file_name']);
        $dir='files/tmp/'.$s_id.'/'.$this->arr['file_name'].'/';
        if(!is_dir($dir)){
            mkdir($dir, 0777, true);
        }
        $url = $dir .$this->arr['file_name'] . '-' . $this->arr['index'];//win接收文件名时要转码,防止中文乱码
        $res=move_uploaded_file($_FILES['file']['tmp_name'], $url);
       
        if(empty($res)){
             $this->code = '400'; //结果编码
            $this->message = '上传失败';
            $this->returninfo();
        }
        //合并切片
        if($this->arr['count']==$this->arr['index']){
            $url = $dir .$this->arr['file_name'];
            $dst = fopen($url, 'wb');
            for($i = 1; $i <=  $this->arr['index']; $i++) {
                $slice = $url . '-' . $i;
                $src = fopen($slice, 'rb');
                stream_copy_to_stream($src, $dst);
                fclose($src);//关闭文件
                unlink($slice);//删除文件
            }
            fclose($dst);
             //将文件移入新目录
            $dir='files/'.date('Y').'/'.date('m').'/'.date('d').'/'.$s_id.'/';
            if(!is_dir($dir)){
                mkdir($dir, 0777, true);
            }
            $newFile=$dir.'f'.mt_rand(0,300).$this->arr['file_name'];
            copy($url,$newFile); //拷贝到新目录
            unlink($url); //删除旧目录下的文件
            //返回文件链接
            $this->content=['url'=>$newFile];
            
        }
        $this->returninfo();
    }
发布了7 篇原创文章 · 获赞 1 · 访问量 876

猜你喜欢

转载自blog.csdn.net/sll9711/article/details/100163249
今日推荐