周大胖子 发表于 2019-10-23 18:46:52

PHP 倒腾OSS 上传与删除, 来自TP3

原框架为客服正在改动的 tp3.2
第一步下载OSS文件[太久远了忘掉了]
第二部 控制器中引入
// 引入 OSS

use OSS\Core\OssException;
use OSS\OssClient;

3.上传函数【直接从客户老版本复制的 我自己写的 】
// 真实上传
        public function upload(){

      if(!session('uid')){redirect(U('Public/login'));}
         
      $upload = new \Think\Upload();
      $upload->maxSize   =   C('UPLOAD_MAXSIZE') ;
      $upload->saveName = array('uniqid', array('', true));
      $upload->exts      =   C('UPLOAD_EXTS');
      $upload->savePath=   C('UPLOAD_SAVEPATH');
               
                vendor('OSS.autoload');
      $ossConfig          = C('OSS');
      $accessKeyId      = $ossConfig['ACCESS_KEY_ID'];//阿里云OSSID
      $accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
      $endpoint         = $ossConfig['ENDPOINT'];//阿里云OSS 地址
      $ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
      $bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间
                $myshow             = $ossConfig['MYSHOW']; //自己的域名
                $mypath                         = $ossConfig['MYPATH']; // bucket 中 的存放路径
               
      $info   =$upload->upload();
      $gourl = 'index.php/home/public/attfile/attid/'.I('attid').'/';
      if(!$info) {
            echo "<script language='javascript' type='text/javascript'>";
            echo "alert('上传失败!$upload->getError()');";
            echo "window.location.href='$gourl'";
            echo "</script>";
      }else{
             foreach($info as $k => $v)
             {
                                // 设置日期目录
                                $dir = date('Y-m-d').'/';
                                $object   = $mypath. $dir .$v['savename'];//想要保存文件的名称

                //这个数组是存上传成功以后返回的访问路径,多文件时使用implode函数将其组合
                $downlink[] = $bucket.'.'.$endpoint.'/'.$object;
                               
                $file       = 'uploads/'.str_replace('./','', $v["savepath"]). $v['savename'];//本地文件路径

                try {
                  $ossClient->uploadFile($bucket, $object, $file);
                  //上传OSS成功
                                        $ss=I('attid');
                                        $data['attid']=$ss;
                                        //$data['folder']='Uploads/'.str_replace('./','', $v["savepath"]);
                                        $data['folder']= $myshow.$mypath.$dir ;                // 文件在OSS中的路径域名 + 目录 + 日期
                                        $data['filename']= $v["savename"];
                                        $data['filetype']=$v["ext"];
                                        $data['filedesc']=$v["name"];
                                        $data['company']=$_SESSION['company'];
                                        $data['uid']=session('uid');
                                        $data['addtime']=date("Y-m-d H:i:s",time());
                                        if(!empty($ss)){
                                                M('files')->data($data)->add();
                                        }
                                       
                  //这里可以删除上传到本地的文件。[文件虽然删除 但是日期目录仍然保存]
                  unlink($file);

                } catch (OssException $e) {
                                        // 报错提示 联系 管理员
                                        printf("Please contact the administrator");
                  //上传失败
                  printf($e->getMessage() . "\n");
                  return;
                }
               
             }

      }


      $filename=$info["filename"]["name"];
      echo "<script language='javascript' type='text/javascript'>";
      echo "alert('文件$filename 上传成功');";
      echo "window.location.href='$gourl'";
      echo "</script>";

    }
       

4. 删除
// 进行删除操作
          public function del()
          {
                $data=I('post.');
               
                vendor('OSS.autoload');
      $ossConfig          = C('OSS');
      $accessKeyId      = $ossConfig['ACCESS_KEY_ID'];//阿里云OSSID
      $accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
      $endpoint         = $ossConfig['ENDPOINT'];//阿里云OSS 地址
      $ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
      $bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间
                $myshow             = $ossConfig['MYSHOW']; //自己的域名
                $mypath                         = $ossConfig['MYPATH']; // bucket 中 的存放路径
               
                // 删掉数据库中的指定数据
                M('files')->where(array('id'=>$data['id']))->delete();
               
                // 删掉oss上的文件
                try{
                       
                        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

                        $filename = substr($data['filename'],strripos($data['filename'],"dezheng"));// 筛选字符串 注意前面不能 加上 /杠
                       
                        $ossClient->deleteObject($bucket, $filename);
               
                        return 1;
                       
                } catch(OssException $e) {
                        var_dump(333);
                        printf(__FUNCTION__ . ": FAILED\n");
                        printf($e->getMessage() . "\n");
                        return2;
                }
                       
          }

看实际情况用。

页: [1]
查看完整版本: PHP 倒腾OSS 上传与删除, 来自TP3