老莫的笔记本  
  
请选择 进入手机版 | 继续访问电脑版
查看: 905|回复: 0

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

[复制链接]

662

主题

878

帖子

5113

积分

超级版主

Rank: 8Rank: 8

积分
5113
发表于 2019-10-23 18:46:52 | 显示全部楼层 |阅读模式
原框架为客服正在改动的 tp3.2
第一步  下载OSS文件[太久远了忘掉了]
第二部 控制器中引入
// 引入 OSS

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

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

  3.         if(!session('uid')){redirect(U('Public/login'));}
  4.            
  5.         $upload = new \Think\Upload();
  6.         $upload->maxSize   =     C('UPLOAD_MAXSIZE') ;
  7.         $upload->saveName = array('uniqid', array('', true));
  8.         $upload->exts      =     C('UPLOAD_EXTS');
  9.         $upload->savePath  =     C('UPLOAD_SAVEPATH');
  10.                
  11.                 vendor('OSS.autoload');
  12.         $ossConfig          = C('OSS');
  13.         $accessKeyId        = $ossConfig['ACCESS_KEY_ID'];//阿里云OSS  ID
  14.         $accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
  15.         $endpoint           = $ossConfig['ENDPOINT'];//阿里云OSS 地址
  16.         $ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
  17.         $bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间
  18.                 $myshow             = $ossConfig['MYSHOW']; //自己的域名
  19.                 $mypath                         = $ossConfig['MYPATH']; // bucket 中 的存放路径
  20.                
  21.         $info   =  $upload->upload();
  22.         $gourl = 'index.php/home/public/attfile/attid/'.I('attid').'/';
  23.         if(!$info) {
  24.               echo "<script language='javascript' type='text/javascript'>";
  25.               echo "alert('上传失败!$upload->getError()');";
  26.               echo "window.location.href='$gourl'";
  27.               echo "</script>";
  28.         }else{
  29.              foreach($info as $k => $v)
  30.              {
  31.                                 // 设置日期目录  
  32.                                 $dir = date('Y-m-d').'/';
  33.                                 $object     = $mypath. $dir .$v['savename'];//想要保存文件的名称

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

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

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

  66.         }


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

  72.     }
  73.        
复制代码


4. 删除
  1. // 进行删除操作
  2.           public function del(  )
  3.           {
  4.                 $data=I('post.');
  5.                
  6.                 vendor('OSS.autoload');
  7.         $ossConfig          = C('OSS');
  8.         $accessKeyId        = $ossConfig['ACCESS_KEY_ID'];//阿里云OSS  ID
  9.         $accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
  10.         $endpoint           = $ossConfig['ENDPOINT'];//阿里云OSS 地址
  11.         $ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
  12.         $bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间
  13.                 $myshow             = $ossConfig['MYSHOW']; //自己的域名
  14.                 $mypath                         = $ossConfig['MYPATH']; // bucket 中 的存放路径  
  15.                
  16.                 // 删掉数据库中的指定数据
  17.                 M('files')->where(array('id'=>$data['id']))->delete();
  18.                
  19.                 // 删掉oss上的文件
  20.                 try{
  21.                        
  22.                         $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

  23.                         $filename = substr($data['filename'],strripos($data['filename'],"dezheng"));  // 筛选字符串 注意前面不能 加上 /杠
  24.                        
  25.                         $ossClient->deleteObject($bucket, $filename);
  26.                
  27.                         return 1;
  28.                        
  29.                 } catch(OssException $e) {
  30.                         var_dump(333);
  31.                         printf(__FUNCTION__ . ": FAILED\n");
  32.                         printf($e->getMessage() . "\n");
  33.                         return  2;
  34.                 }
  35.                        
  36.           }
复制代码


看实际情况用。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表