ThinkPHP上传文件及如何判断上传数据是否重复

文件上传

   1.在ThinkPHP中使用上传功能无需进行特别处理,但要注意,要使用上传功能 表单中需要设置 enctype="multipart/form-data"。


   2.tp自带了上传文件的类,位置:Think/Upload.class.php。所以tp框架用起来是十分方便的。我们来看下upload方法的实现代码:

    //上传文件
  public function upload(){
     if(IS_GET){
        $this->display();
        exit;
     }
       $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{
         $this->success('上传成功'.$info['file']['savePath'].$info['file']['savename']);
     }

  }

  3.每个上传的文件是一个记录了下面信息的数组,文件上传成功后,就可以使用这些文件信息来进行其他的数据操作,例如保存到当前数据表或者单独的附件数据表。


例如,下面表示把上传信息保存到数据表的字段:

$this->success('上传成功'.$info['file']['savePath'].$info['file']['savename']);

  4.如何判断上传文件的信息是否重复,首先要从文件中获取数据,如果存在则重复,不执行添加代码,如果不存在,则添加到数据库中。下面是一段判断学号上传是否重复的代码,上传成功执行这段代码即可

 $fp=fopen($file,'r');
    if($fp){
      $fields=array('no','name','sex');
      $model=M('newstudent');
      $arrNo = $model->getField('no',true);


      $arr=array();   
      while(($row=fgetcsv($fp,1000,","))!==false){
        $row=array_combine($fields, $row);
        if(in_array($row['no'], $arrNo)){
          echo $row['no'].'存在'.'<br>';
        }else{
          $arrNo[]=$row['no'];
          $arr[]=$row;
          echo $row['no'].'导入成功'.'<br>';
        } 
        if(count($arr)==1000){
          $model->addAll($arr);
          unset($arr);
        }
      }
      if(count($arr)>0){
        $model->addAll($arr);
      }
      $this->success('添加成功');
    }
  }

### ThinkPHP8 中实现图片文件批量上传ThinkPHP8中,为了实现图片文件的批量上传功能,可以借鉴之前版本的经验并结合新的特性来完成这一操作。下面是一个详细的示例说明如何通过ThinkPHP8框架来进行多张图片的同时上传。 #### 准备工作 确保服务器配置允许较大的文件大小以及足够的POST数据量: - `upload_max_filesize` 设置最大上传文件尺寸 - `post_max_size` 需要大于等于 `upload_max_filesize` - `memory_limit` 应该设置得更高以支持大文件处理[^3] 这些参数可以在php.ini文件里调整。 #### 控制器逻辑编写 创建一个新的控制器方法用于接收来自客户端提交的数据包,并对其进行解析和保存至指定位置。 ```php namespace app\controller; use think\Request; use think\File; public function uploadImages(Request $request){ // 获取多个文件对象数组 $files = $request->file('images'); foreach ($files as $key => $file) { // 判断是否文件上传 if (empty($file)) continue; try{ // 自定义存储路径 $savePath = 'uploads/images/' . date("Ymd") . '/'; // 使用唯一ID作为文件名前缀防止重复覆盖 $info = $file->validate([ 'ext'=>['jpg','jpeg','png'] ])->rule(function(){ return uniqid(); })->move(ROOT_PATH.'public/'.$savePath); if(!$info){ throw new \Exception($file->getError()); } // 返回成功信息给前端 echo "File {$key} uploaded successfully: ".str_replace("\\", "/", $info->getSaveName())."\n"; }catch (\Exception $e){ // 错误处理 echo "Error uploading file {$key}: ".$e->getMessage()."\n"; } } } ``` 此段代码实现了对入请求中的每一个图像文件进行单独验证、重命名并移动到应用程序公共目录下的特定子文件夹内。如果遇到任何错误,则会捕获异常并将消息返回给调用方。 #### 客户端HTML表单设计 为了让用户能够一次选择多个文件,在HTML页面上构建一个多选输入框是非常必要的。这里给出一个简单的例子展示怎样构造这样的界面元素。 ```html <form action="/index.php/index/uploadImages" method="post" enctype="multipart/form-data"> Select images to upload: <input type="file" name="images[]" multiple> <button type="submit">Upload</button> </form> ``` 上述表单允许用户选取一组图片并通过HTTP POST方式发送给服务器上的对应路由地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值